Tanel Poder Consulting
I solve (big) computer problems.
Talks & Interviews
Training Videos
Latest Articles
-
Testing the Silk Platform in 2024: Achieving 20 GiB/s I/O Throughput in a Single Cloud VM
-
Visualizing Vision Transformer Vector Embeddings as Heatmaps Videos
-
Visualizing and Comparing Vector Embeddings as Heatmaps
-
Tracking, not Tracing, Linux Thread Activity for Complete System Visibility (eBPF Summit)
-
Python Supports Profiling with Perf - How Does It Work?
-
Can a User Process Consume Kernel Mode CPU Without a Syscall?
-
Next Big Thing: X-Ray Vision for Linux Systems with eBPF
-
Syscallargs: List All Linux System Calls With Their Arguments
-
RTX4090 converted into an eGPU
-
Oracle Hint Scopes and Join Level Cardinality Hint
-
New Commenting System
-
Oracle Shared Pool Internals: Allocated Chunk Status Indicators in Heap Dumps
-
Oracle Index Parallel Degree Fix After Parallel Creation or Rebuild
-
Report Current Oracle Session Wait Chains from GV$SESSION without ASH
-
Advanced Oracle Troubleshooting Guide, Part 13: OStackProf for Linux, Unix & MacOSX Clients
-
Testing Oracle's Use of Optane Persistent Memory, Part 2 - Fast Log File Sync Waits
-
Testing Oracle's Use of Optane Persistent Memory, Part 1 - Low Latency Commits
-
MySQL Now Shows its Thread Names at OS Level for Better Troubleshooting
-
xb.sql and xbi.sql - Explain Oracle Execution Plans Better! (Part 2)
-
My New Learning Platform and What I'm Up To in 2022
-
Achieving 10 GB/s Scanning Rate in a Single Cloud VM
-
Testing The Silk Platform - Hands-On Technical Analysis of High-Performance I/O in the Cloud
-
Virtual Conference: Troubleshooting Very Complex Oracle Performance Problems
-
Do Not Use '>' in Your Command Prompt (and How to Stay Safe in Shell)
-
Is Your Linux Version Hiding Interrupt CPU Usage From You?
-
Video: High Performance Block I/O on Linux
-
Achieving 11M IOPS & 66 GB/s IO on a Single ThreadRipper Workstation
-
Oracle Wait Event Name vs. Display Name
-
Measuring Java JVM thread activity in Linux with task state sampling
-
Reasons why SELECT * is bad for SQL performance
-
High System Load with Low CPU Utilization on Linux?
-
Hacking Session: 7 Levels of Hint Invalidity in Oracle SQL
-
Hacking Session: Oracle SQL Monitoring - Understanding the Execution Timeline column and CPU usage
-
Virtual Conference: Systematic Oracle SQL Optimization Interview Videos
-
Oracle Fatal Background Processes
-
Virtual Conference Update: Systematic Oracle SQL Optimization in 2020
-
Oracle Shared Pool Internals: List Chunk Position in the LRU List
-
SchedLat: a Low Tech Script for Measuring Process CPU Scheduling Latency on Linux
-
Announcing My Retirement (in 2030)!
-
ORA-12850: Could not allocate slaves on all specified instances error and a workaround for my scripts
-
Oracle Performance Troubleshooting Without OS Access, Part 1: Identifying CPU Scheduling Latency
-
Video: Troubleshooting Complex Oracle Performance Problems (Jan 2020)
-
Hacking Session: Troubleshooting Complex Oracle Performance Problems (January 2020)
-
help.sql: Show TPT Script Purpose and Syntax
-
Oracle State Objects and Reading System State Dumps Hacking Session Video
-
New scripts: xb.sql and xbi.sql - Explain Oracle Execution Plans Better! (Part 1)
-
Traveling, Speaking, Training, Gluent and What I'm Up To (2019)
-
Dump Current Oracle SQL Execution Plan Line ID Using Oradebug
-
pSnapper: Linux Process Snapper Page and Videos
-
Announcing Linux Process Snapper tool and a Linux Troubleshooting Hacking Session (3rd April 9am PDT)
-
What Caused This Wait Event: Using Oracle's wait_event[] tracing
-
Tutorial: Troubleshooting Linux SSH Login Delay - Why does logging in always take 10 seconds?
-
Practical Linux Performance & Application Troubleshooting Training Details and Table of Contents
-
Scripts for Drilling Down Into Unknown Optimizer Changes
-
Visualizing SQL Plan Execution Time With FlameGraphs
-
Generate Oracle SQL Monitoring Reports as HTML using SQL Developer v18.3 (no Flash needed)
-
Log file switch (checkpoint incomplete) wait events and LGWR waiting for checkpoint progress
-
Oracle SQL Monitoring and Advanced ASH Usage Hacking Sessions!
-
Oracle SQL Tuning training & Oracle Troubleshooting training and some Linux stuff too!
-
Webinar: Troubleshooting a Complex Oracle Performance Issue
-
My Performance & Troubleshooting scripts (TPT) for Oracle are now in GitHub and open sourced
-
Video: Oracle X$TRACE, Wait Event Internals and Background Process Communication
-
Secret Hacking Session: Oracle Background Process Communication, Exotic Wait Events and Some Tracing too
-
Advanced Oracle Troubleshooting seminar in 2018!
-
Apache Impala Internals Deep Dive with Tanel Poder + Gluent New World Training Month
-
GNW01: In-Memory Processing for Databases
-
My BIWA Summit Presentations
-
RAM is the new disk – and how to measure its performance – Part 3 – CPU Instructions & Cycles
-
My New Youtube Channel
-
Troubleshooting Another Complex Performance Issue – Oracle direct path inserts and SEG$ contention
-
SQL Monitoring in Oracle Database 12c
-
Advanced Oracle Troubleshooting v2.5 (with 12c stuff too)
-
RAM is the new disk – and how to measure its performance – Part 2 – Tools
-
RAM is the new disk – and how to measure its performance – Part 1 – Introduction
-
The Hybrid World is Coming
-
Old ventures and new adventures
-
Advanced Oracle Troubleshooting Guide – Part 12: control file reads causing enq: SQ – contention waits?
-
Sqlplus is my second home, part 8: Embedding multiple sqlplus arguments into one variable
-
Oracle Exadata Performance: Latest Improvements and Less Known Features
-
Oracle In-Memory Column Store Internals – Part 1 – Which SIMD extensions are getting used?
-
About index range scans, disk re-reads and how your new car can go 600 miles per hour!
-
Combining Bloom Filter Offloading and Storage Indexes on Exadata
-
What the heck are the /dev/shm/JOXSHM_EXT_x files on Linux?
-
Oracle Memory Troubleshooting, Part 4: Drilling down into PGA memory usage with V$PROCESS_MEMORY_DETAIL
-
Slides of my previous presentations
-
Where does the Exadata storage() predicate come from?
-
Oracle X$ tables – Part 1 – Where do they get their data from?
-
cell flash cache read hits vs. cell writes to flash cache statistics on Exadata
-
Hard Drive Predictive Failures on Linux and Exadata
-
When do Oracle Parallel Execution Slaves issue buffered physical reads – Part 2?
-
When do Oracle Parallel Execution Slaves issue buffered physical reads – Part 1?
-
Diagnosing buffer busy waits with the ash_wait_chains.sql script (v0.2)
-
SGA bigger than than the amount of HugePages configured (Linux – 11.2.0.3)
-
Why doesn’t ALTER SYSTEM SET EVENTS set the events or tracing immediately?
-
Advanced Oracle Troubleshooting Guide – Part 11: Complex Wait Chain Signature Analysis with ash_wait_chains.sql
-
Oracle Performance & Troubleshooting Online Seminars in 2013
-
Scalar Subqueries in Oracle SQL WHERE clauses (and a little bit of Exadata stuff too)
-
ShowMOS: How to get rid of the annoying “The Page has Expired” dialog in My Oracle Support
-
Oracle 12c: Scalar Subquery Unnesting transformation
-
Oracle Database 12c R1 (12.1.0.1.0) is finally released!
-
Getting the Most Out of ASH online seminar
-
Forcing Smart Scans on Exadata – is the _serial_direct_read parameter safe to use in production?
-
Debugger Dangers – Part 2
-
List Exadata Storage Cell disk summary with cellpd.sql and cellpdx.sql scripts
-
List Exadata Disk Layout and Topology with the exadisktopo scripts
-
V$CELL_THREAD_HISTORY – “ASH” for Exadata Storage Cells
-
Understanding what a hint affects using the V$SQL_FEATURE views
-
Listing Exadata storage cells and their configuration info from V$CELL_CONFIG
-
Alter session force parallel query doesn’t really force anything
-
asqlmon.sql: SQL Monitoring-like execution plan line level drilldown into SQL response time
-
ExaSnapper 0.7 beta download and the hacking session videos
-
Peeking into Linux kernel-land using /proc filesystem for quick’n’dirty troubleshooting
-
Even more Snapper – v4.03 now works in SQL Developer too!
-
Manual “before” and “after” snapshot support in Snapper v4
-
Snapper v4.02 and the Snapper launch party video
-
Drilling Deep Into Exadata Performance with ASH, SQL Monitoring and Exadata Snapper – slides and a hacking session!
-
Troubleshooting high CPU usage with poor-man’s stack profiler – in a one-liner!
-
Session Snapper v4 – The World’s Most Advanced Oracle Troubleshooting Script!
-
Sqlplus is my second home: Part 7 – Downloading files via sqlplus :-)
-
Japanese translation of some of my blog articles
-
What the heck is the INTERNAL_FUNCTION in execution plan predicate section?
-
A tip for lazy Oracle users – type less with ANSI DATE and TIMESTAMP SQL syntax
-
Snapper v3.61 released – and more work is in progress!
-
Select statement generating redo – and lost write detection
-
Sqlplus is my second home: Part 6 – Colorizing sqlplus and terminal output
-
Optimizer statistics-driven direct path read decision for full table scans (_direct_read_decision_statistics_driven)
-
The limitations of CURSOR_SHARING = FORCE and FORCE_MATCHING_SIGNATURE for SQL plan stability
-
MOATS-like sqlplus “top” utility for RAC
-
Oradebug hanganalyze with a prelim connection and “ERROR: Can not perform hang analysis dump without a process state object and a session state object.”
-
Advanced Oracle Troubleshooting Guide – Part 10: Index unique scan doing multiblock reads?!
-
Where is LOB data stored?
-
Exadata Smart Scan predicate offloading and sequence.NEXTVAL
-
Create a database link with the new host:port/service syntax
-
Oracle Core: Essential Internals for DBAs and Developers book by Jonathan Lewis
-
Profiling trace files with preprocessor external tables in 11g and some parallel execution hacking
-
Evil things are happening in Oracle
-
What the heck is the SQL Execution ID – SQL_EXEC_ID?
-
V8 Bundled Exec call – and Oracle Program Interface (OPI) calls
-
Full scans, direct path reads and ORA-8103 error hacking session video
-
Are you getting the most out of your Exadata performance? Part 1
-
What is the purpose of segment level checkpoint before DROP/TRUNCATE of a table?
-
Another cache buffers chains latch contention troubleshooting example using LatchProf
-
Tech Reviewer, Tech Reviewer! ;-)
-
IOUG Select Journal Editor’s Choice Award 2011
-
Knowing what you want to achieve before thinking of how to achieve it – a query optimization example
-
Running SELECT … INTO :bind_variable from SQL
-
Latch contention troubleshooting case study and Flashback Database performance issues with LOBs
-
MOATS: The Mother of All Tuning Scripts!
-
An index of my TPT scripts
-
LOBREAD SQL Trace entry in Oracle 11.2 (and tracing OPI calls with event 10051)
-
Implicit datatype conversion in the parsing phase – something new I learned today!
-
ORA-4031 errors, contention, cursor management issues and shared pool fragmentation – free secret seminar!
-
Exadata CAN do smart scans on bitmap indexes
-
Oracle Exadata Performance series – Part 1: Should I use Hugepages on Linux Database Nodes?
-
Finding Oracle Homes which Oracle instances are using on Linux
-
New cursor_bind_capture_destination parameter in Oracle 11.2.0.2
-
Performance Stories from Exadata Migrations
-
Is this valid SQL syntax? :-)
-
Snapper 3.52 – With Oracle 9.2 support!
-
Asynch descriptor resize wait event in Oracle
-
A little new feature for shared pool geeks :-)
-
COUNT STOPKEY operation (the where ROWNUM <= N predicate) doesn't process over ~4 Billion rows and returns wrong results
-
Read currently running SQL statement’s bind variable values using V$SQL_MONITOR.BIND_XML in Oracle 11.2
-
The most fundamental difference between hash and nested loop joins
-
Oracle Closed World presentation links
-
Which number takes more space in an Oracle row?
-
Exadata v2 Smart Scan Performance Troubleshooting article
-
Dropping and creating tables in read only tablespaces?!
-
The full power of Oracle’s diagnostic events, part 2: ORADEBUG DOC and 11g improvements
-
Oracle memory troubleshooting article
-
Flexible Sqlplus command line history with RLWRAP
-
Execution plan Quiz: Shouldn’t these row sources be the other way around ;-)
-
Quiz: Explaining index creation
-
cursor: pin S waits, sporadic CPU spikes and systematic troubleshooting
-
KGH: NO ACCESS – Buffer cache inside streams pool too!
-
Non-trivial performance problems
-
Calculate SQL_ID and SQL_HASH_VALUE from SQL text
-
Oracle Latch Contention Troubleshooting
-
Oracle Session Snapper v3.10
-
How to CANCEL a query running in another session?
-
New versions of LatchProf and LatchProfX for latch contention troubleshooting and tuning
-
Oracle Troubleshooting: How to read Oracle ERRORSTACK output?!
-
Using Process Memory Matrix script for calculating Oracle process memory usage on Solaris
-
Oracle Wait Event reference
-
Oracle Peformance Visualization…
-
Bind Variable Peeking – execution plan inefficiency
-
Recursive sessions…
-
Sometimes things are easy (Part 1): How to fix wrapped execution plan text?
-
Beyond Oracle Wait Interface – Part 2
-
NULL is not zero!
-
Measuring what matters
-
Finding the reasons for excessive logical IOs
-
Explain Plan For command may show you the wrong execution plan – Part 1
-
Detect chained and migrated rows in Oracle – Part 1
-
What’s a good way to learn some Oracle internals every day?
-
SystemTap is production supported in Redhat EL5.4
-
KGL simulator, shared pool simulator and buffer cache simulator – what are these?
-
KGH: NO ACCESS allocations in V$SGASTAT – buffer cache within shared pool!
-
Oracle 11gR2 has been released – and with column oriented storage option
-
latch: cache buffers chains latch contention – a better way for finding the hot block
-
Select COUNT(*) and COUNT(column) are different things!
-
Alter system kill session and ORA-00031: session marked for kill
-
An interview with me
-
How to detect when a cursor was closed from SQL trace output?
-
Identify the SQL statement causing those WAIT #X lines in a (top-truncated) sql tracefile
-
(Secret) Preview of Oracle 12g CBO leaked from Oracle labs…
-
Oracle memory troubleshooting, Part 3: Automatic top subheap dumping with heapdump
-
Using Perfsheet and TPT scripts for solving real life performance problems
-
ORA-04031 errors and monitoring shared pool subpool memory utilization with sgastatx.sql
-
Oracle Performance Visualization videos from Sydney
-
Scripts for showing execution plans via plain SQL and also in Oracle 9i
-
“Free” DBA_HIST AWR views in 11g…
-
I have been troubleshooting since I was a kid! :)
-
Tracing Oracle SQL plan execution with DTrace
-
Seminar feedback and pictures from Singapore
-
Read OS environment variables using DBMS_SYSTEM.GET_ENV()
-
I’m an Oracle ACE Director now :)
-
Oracle 11g: Reading alert log via SQL
-
Another LatchProfX use case
-
The real history of Oracle database revealed!
-
Oracle, Timesten and PL/SQL support
-
The full power of Oracle’s diagnostic events, part 1: Syntax for KSD debug event handling
-
60000 bind variables?! Maybe it’s time to use a temporary table instead…
-
SQL_ID is just a fancy representation of hash value
-
Performance Visualization, Capacity planning and Hotsos Symposium
-
When was a table last changed?
-
Multipart cursor subexecution and PRECOMPUTE_SUBQUERY hint
-
Identifying shared memory segment users using lsof
-
Reliable latch waits and a new blog
-
Oracle memory troubleshooting, Part 1: Heapdump Analyzer
-
Performance Visualization made easy – PerfSheet 2.0 beta
-
A little oradebug enhancement in Oracle 11g
-
Advanced Oracle Troubleshooting Guide, Part 9 – Process stack profiling from sqlplus using OStackProf
-
Transportable tablespaces and ROWID uniqueness
-
VLDB 2008 proceedings, Oracle optimizer plan stability, adaptive cursor sharing and SecureFiles
-
Oracle hidden costs revealed, Part2 – Using DTrace to find why writes in SYSTEM tablespace are slower than in others
-
Flexible sampling of any V$ or X$ view with sample.sql
-
Case study on some rowcache internals, cached non-existent objects and a describe bug
-
Why does even a small difference in SQL text cause a hard parse?
-
Script: Display valid values for multioption parameters (including hidden parameters)
-
The simplest query for checking what’s happening in a database
-
Library cache latches gone in Oracle 11g
-
Advanced Oracle Troubleshooting Guide, Part 8: Even more detailed latch troubleshooting using LatchProfX
-
Closed database and WITH subquery
-
Advanced Oracle Troubleshooting Guide, Part 7: Sampling latch holder statistics using LatchProf
-
Another use case for WaitProf – diagnosing “events in waitclass Other”
-
Killing an Oracle process from inside Oracle
-
cursor_space_for_time To Be Deprecated
-
Advanced Oracle Troubleshooting Guide, Part 6: Understanding Oracle execution plans with os_explain
-
Debugger dangers
-
Short note on KGX Mutexes
-
Generating lots of rows using connect by – safely!
-
Advanced Oracle Troubleshooting Guide, Part 5: Sampling V$ stuff with WaitProf. Really fast. Using SQL!
-
Performance Tools Quick Reference Guide
-
Advanced Oracle Troubleshooting Guide, Part 4: Diagnosing a long parsing issue
-
Snapper shortcut
-
Querying the current tracefile name, using SQL – with tracefile_identifier
-
Oracle Troubleshooting with Snapper – detecting who’s causing excessive redo generation
-
Performance and Scalalability Improvements in Oracle 10g and 11g
-
Using autonomous transactions for sleeping
-
SQL*Net break/reset to client
-
SQL*Net message to client vs SQL*Net more data to client
-
SQL*Net message to client wait isn’t really what it’s thought to be
-
Oracle hidden costs revealed, part 1 – Does a batch job run faster when executed locally?
-
Excellent article on Oracle 11g PL/SQL function result cache
-
Can you write a working SQL statement without using any whitespace?
-
Expensive calculator…
-
Why does Oracle parameter count change during session lifetime?
-
Systematic application troubleshooting in Unix
-
Perl version of Snapper
-
Sqlplus is my second home, part 5: Reading the name of currently executing script
-
Oracle Security, Part 2: Your read only accounts aren’t that read only
-
Sqlplus is my second home, part 4: Getting sqlplus parameter value into a variable
-
A simple interview question
-
How to resolve SQL object and column names all the way to base tables and columns in Oracle?
-
Advanced Oracle Troubleshooting Guide, Part 3: More adventures in process stack
-
Sqlplus is my second home, part 3: Colored selections in Windows XP command prompt
-
Sqlplus is my second home, part 2: Running SQL scripts from remote locations using HTTP
-
Operating systems are lazy allocating memory
-
Advanced Oracle Troubleshooting Guide, Part 2: No magic is needed, systematic approach will do
-
Oracle Session Snapper, part 2: Getting most out of Snapper
-
Oracle 11g internals part 1: Automatic Memory Management
-
Oracle Session Snapper – real-time session-level performance stats for DBAs
-
Sqlplus is my second home, Part 1: HTMLizing your sqlplus output
-
Session-level statspack
-
A gotcha with parallel index builds, parallel degree and query plans
-
My version of SQL string to table tokenizer
-
Advanced Oracle Troubleshooting Guide: When the wait interface is not enough [part 1]