The Curious Engineer

All blogs / Databases

Tanel Poder Blog

tanelpoder.com

- Linux, Oracle, SQL performance tuning and troubleshooting training & writing.

DatabasesPerformance / optimizationLinux / Unix

Posts
314 from 1 Jan 2001 to 10 Apr 2026
Posting
now and then (4 in the last year)
Kind
personal blog
Feed
https://tanelpoder.com/index.xml

2026 2

  1. Get Oracle Partition High Values as VARCHAR2 types instead of LONG in Oracle 19c and earlier
  2. Testing the Datadog Explain Plan Visualizer with Oracle execution plans

2025 21

  1. New scripts: vstat.sql & dstat.sql for showing Oracle Sysmetric history with 1-minute granularity
  2. xb.sql and xbi.sql - Explain Oracle Execution Plans Better! (Part 3 - Cardinality Misestimates)
  3. tabhisthybrid.sql: Display Oracle hybrid histograms and filter cardinality estimates
  4. pqr.sql: Generate QR Codes with Pure SQL in PostgreSQL
  5. The xCapture and xtop eBPF tools are now in beta, with a demo dataset
  6. CatVector Demo Website
  7. New Tool: xstack - Completely Passive eBPF Linux Stack Profiling Without Any Tracepoints
  8. Dimensional Analysis of System Performance with eBPF & xtop: Top for Wall-Clock Time
  9. Webinar: Testing High-Performance Vector Search With CatBench on Google AlloyDB Omni
  10. My Blog Has Turned 18 Years Old
  11. Catbench Vector Search App has Postgres Query Throughput and Latency Monitoring Now
  12. Using Postgres pg_test_fsync tool for testing low latency writes
  13. Find which Oracle SQL_ID hits the SQL*Net break/reset to client event
  14. New Tool: lsds - List All Linux Block Devices and Settings in One Place
  15. Optimizing eBPF I/O latency accounting when running 37M IOPS on a 384-CPU server
  16. xCapture v3: Linux Performance Analysis with Modern eBPF and DuckDB
  17. When eBPF task->stack->pt_regs reads return garbage on the latest Linux kernels, blame Fred!
  18. TracepointArgs: List Any Linux Tracepoint with Their Arguments, Datatypes and Related Structs
  19. CatBench Vector Search Playground
  20. Embedding Vectors of the Same Image Rotated Over 360 Degrees
  21. SQL Plan Execution FlameGraphs with Loop and Row Counts

2024 15

  1. Embedding Vectors vs. Vector Embeddings
  2. Video: Testing the Silk Platform in 2024 Interview (12 minutes)
  3. Testing the Silk Platform in 2024: Achieving 20 GiB/s I/O Throughput in a Single Cloud VM
  4. Visualizing and Comparing Embedding Vectors as Heatmaps (Videos)
  5. Visualizing and Comparing Embedding Vectors as Heatmaps
  6. Tracking, not Tracing, Linux Thread Activity for Complete System Visibility (eBPF Summit)
  7. Python Supports Profiling with Perf - How Does It Work?
  8. Can a User Process Consume Kernel Mode CPU Without a Syscall?
  9. Next Big Thing: X-Ray Vision for Linux Systems with eBPF
  10. Syscallargs: List All Linux System Calls With Their Arguments
  11. RTX4090 converted into an eGPU
  12. Oracle Hint Scopes and Join Level Cardinality Hint
  13. New Commenting System
  14. Oracle Shared Pool Internals: Allocated Chunk Status Indicators in Heap Dumps
  15. Oracle Index Parallel Degree Fix After Parallel Creation or Rebuild

2022 7

  1. Report Current Oracle Session Wait Chains from GV$SESSION without ASH
  2. Advanced Oracle Troubleshooting Guide, Part 13: OStackProf for Linux, Unix & MacOSX Clients
  3. Testing Oracle's Use of Optane Persistent Memory, Part 2 - Fast Log File Sync Waits
  4. Testing Oracle's Use of Optane Persistent Memory, Part 1 - Low Latency Commits
  5. MySQL Now Shows its Thread Names at OS Level for Better Troubleshooting
  6. xb.sql and xbi.sql - Explain Oracle Execution Plans Better! (Part 2)
  7. My New Learning Platform and What I'm Up To in 2022

2021 8

  1. Achieving 10 GB/s Scanning Rate in a Single Cloud VM
  2. Testing The Silk Platform - Hands-On Technical Analysis of High-Performance I/O in the Cloud
  3. Do Not Use '>' in Your Command Prompt (and How to Stay Safe in Shell)
  4. Video: Troubleshooting Complex Oracle Issues Part 2
  5. Is Your Linux Version Hiding Interrupt CPU Usage From You?
  6. Video: High Performance Block I/O on Linux
  7. Achieving 11M IOPS & 66 GiB/s IO on a Single ThreadRipper Workstation
  8. Oracle Wait Event Name vs. Display Name

2020 15

  1. Measuring Java JVM thread activity in Linux with task state sampling
  2. Reasons why SELECT * is bad for SQL performance
  3. High System Load with Low CPU Utilization on Linux?
  4. Hacking Session: 7 Levels of Hint Invalidity in Oracle SQL
  5. Hacking Session: Oracle SQL Monitoring - Understanding the Execution Timeline column and CPU usage
  6. Oracle Fatal Background Processes
  7. Oracle Shared Pool Internals: List Chunk Position in the LRU List
  8. SchedLat: a Low Tech Script for Measuring Process CPU Scheduling Latency on Linux
  9. Announcing My Retirement (in 2030)!
  10. ORA-12850: Could not allocate slaves on all specified instances error and a workaround for my scripts
  11. Oracle Performance Troubleshooting Without OS Access, Part 1: Identifying CPU Scheduling Latency
  12. Video: Troubleshooting Complex Oracle Performance Problems (Jan 2020)
  13. Hacking Session: Troubleshooting Complex Oracle Performance Problems (January 2020)
  14. help.sql: Show TPT Script Purpose and Syntax
  15. Oracle State Objects and Reading System State Dumps Hacking Session Video

2019 7

  1. New scripts: xb.sql and xbi.sql - Explain Oracle Execution Plans Better! (Part 1)
  2. Dump Current Oracle SQL Execution Plan Line ID Using Oradebug
  3. pSnapper: Linux Process Snapper Page and Videos
  4. Announcing Linux Process Snapper tool and a Linux Troubleshooting Hacking Session (3rd April 9am PDT)
  5. What Caused This Wait Event: Using Oracle's wait_event[] tracing
  6. Tutorial: Troubleshooting Linux SSH Login Delay - Why does logging in always take 10 seconds?
  7. Practical Linux Performance & Application Troubleshooting Training Details and Table of Contents

2018 10

  1. Scripts for Drilling Down Into Unknown Optimizer Changes
  2. Visualizing SQL Plan Execution Time With FlameGraphs
  3. Generate Oracle SQL Monitoring Reports as HTML using SQL Developer v18.3 (no Flash needed)
  4. Log file switch (checkpoint incomplete) wait events and LGWR waiting for checkpoint progress
  5. Oracle SQL Monitoring and Advanced ASH Usage Hacking Sessions!
  6. Oracle SQL Tuning training & Oracle Troubleshooting training and some Linux stuff too!
  7. Webinar: Troubleshooting a Complex Oracle Performance Issue
  8. My Performance & Troubleshooting scripts (TPT) for Oracle are now in GitHub and open sourced
  9. Video: Oracle X$TRACE, Wait Event Internals and Background Process Communication
  10. Secret Hacking Session: Oracle Background Process Communication, Exotic Wait Events and Some Tracing too

2017 2

  1. Advanced Oracle Troubleshooting seminar in 2018!
  2. Apache Impala Internals Deep Dive with Tanel Poder + Gluent New World Training Month

2016 2

  1. GNW01: In-Memory Processing for Databases
  2. My BIWA Summit Presentations

2015 12

  1. RAM is the new disk – and how to measure its performance – Part 3 – CPU Instructions & Cycles
  2. My New Youtube Channel
  3. Troubleshooting Another Complex Performance Issue – Oracle direct path inserts and SEG$ contention
  4. SQL Monitoring in Oracle Database 12c
  5. Advanced Oracle Troubleshooting v2.5 (with 12c stuff too)
  6. RAM is the new disk – and how to measure its performance – Part 2 – Tools
  7. RAM is the new disk – and how to measure its performance – Part 1 – Introduction
  8. The Hybrid World is Coming
  9. Old ventures and new adventures
  10. Advanced Oracle Troubleshooting Guide – Part 12: control file reads causing enq: SQ – contention waits?
  11. Sqlplus is my second home, part 8: Embedding multiple sqlplus arguments into one variable
  12. Oracle Exadata Performance: Latest Improvements and Less Known Features

2014 8

  1. Oracle In-Memory Column Store Internals – Part 1 – Which SIMD extensions are getting used?
  2. About index range scans, disk re-reads and how your new car can go 600 miles per hour!
  3. Combining Bloom Filter Offloading and Storage Indexes on Exadata
  4. What the heck are the /dev/shm/JOXSHM_EXT_x files on Linux?
  5. Oracle Memory Troubleshooting, Part 4: Drilling down into PGA memory usage with V$PROCESS_MEMORY_DETAIL
  6. Slides of my previous presentations
  7. Where does the Exadata storage() predicate come from?
  8. Oracle X$ tables – Part 1 – Where do they get their data from?

2013 34

  1. cell flash cache read hits vs. cell writes to flash cache statistics on Exadata
  2. Hard Drive Predictive Failures on Linux and Exadata
  3. When do Oracle Parallel Execution Slaves issue buffered physical reads – Part 2?
  4. When do Oracle Parallel Execution Slaves issue buffered physical reads – Part 1?
  5. Diagnosing buffer busy waits with the ash_wait_chains.sql script (v0.2)
  6. SGA bigger than the amount of HugePages configured (Linux – 11.2.0.3)
  7. Why doesn’t ALTER SYSTEM SET EVENTS set the events or tracing immediately?
  8. Advanced Oracle Troubleshooting Guide – Part 11: Complex Wait Chain Signature Analysis with ash_wait_chains.sql
  9. Oracle Performance & Troubleshooting Online Seminars in 2013
  10. Scalar Subqueries in Oracle SQL WHERE clauses (and a little bit of Exadata stuff too)
  11. ShowMOS: How to get rid of the annoying “The Page has Expired” dialog in My Oracle Support
  12. Oracle 12c: Scalar Subquery Unnesting transformation
  13. Oracle Database 12c R1 (12.1.0.1.0) is finally released!
  14. Getting the Most Out of ASH online seminar
  15. Forcing Smart Scans on Exadata – is the _serial_direct_read parameter safe to use in production?
  16. Debugger Dangers – Part 2
  17. List Exadata Storage Cell disk summary with cellpd.sql and cellpdx.sql scripts
  18. List Exadata Disk Layout and Topology with the exadisktopo scripts
  19. V$CELL_THREAD_HISTORY – “ASH” for Exadata Storage Cells
  20. Understanding what a hint affects using the V$SQL_FEATURE views
  21. Listing Exadata storage cells and their configuration info from V$CELL_CONFIG
  22. Alter session force parallel query doesn’t really force anything
  23. asqlmon.sql: SQL Monitoring-like execution plan line level drilldown into SQL response time
  24. ExaSnapper 0.7 beta download and the hacking session videos
  25. Peeking into Linux kernel-land using /proc filesystem for quick’n’dirty troubleshooting
  26. Even more Snapper – v4.03 now works in SQL Developer too!
  27. Manual “before” and “after” snapshot support in Snapper v4
  28. Snapper v4.02 and the Snapper launch party video
  29. Drilling Deep Into Exadata Performance with ASH, SQL Monitoring and Exadata Snapper – slides and a hacking session!
  30. Troubleshooting high CPU usage with poor-man’s stack profiler – in a one-liner!
  31. Session Snapper v4 – The World’s Most Advanced Oracle Troubleshooting Script!
  32. Sqlplus is my second home: Part 7 – Downloading files via sqlplus :-)
  33. Japanese translation of some of my blog articles
  34. What the heck is the INTERNAL_FUNCTION in execution plan predicate section?

2012 12

  1. A tip for lazy Oracle users – type less with ANSI DATE and TIMESTAMP SQL syntax
  2. Snapper v3.61 released – and more work is in progress!
  3. Select statement generating redo – and lost write detection
  4. Sqlplus is my second home: Part 6 – Colorizing sqlplus and terminal output
  5. Optimizer statistics-driven direct path read decision for full table scans (_direct_read_decision_statistics_driven)
  6. The limitations of CURSOR_SHARING = FORCE and FORCE_MATCHING_SIGNATURE for SQL plan stability
  7. MOATS-like sqlplus “top” utility for RAC
  8. Oradebug hanganalyze with a prelim connection and “ERROR: Can not perform hang analysis dump without a process state object and a session state object.”
  9. Advanced Oracle Troubleshooting Guide – Part 10: Index unique scan doing multiblock reads?!
  10. Where is LOB data stored?
  11. Exadata Smart Scan predicate offloading and sequence.NEXTVAL
  12. Create a database link with the new host:port/service syntax

2011 26

  1. Oracle Core: Essential Internals for DBAs and Developers book by Jonathan Lewis
  2. Profiling trace files with preprocessor external tables in 11g and some parallel execution hacking
  3. Evil things are happening in Oracle
  4. What the heck is the SQL Execution ID – SQL_EXEC_ID?
  5. V8 Bundled Exec call – and Oracle Program Interface (OPI) calls
  6. Full scans, direct path reads and ORA-8103 error hacking session video
  7. Are you getting the most out of your Exadata performance? Part 1
  8. What is the purpose of segment level checkpoint before DROP/TRUNCATE of a table?
  9. Another cache buffers chains latch contention troubleshooting example using LatchProf
  10. Tech Reviewer, Tech Reviewer! ;-)
  11. IOUG Select Journal Editor’s Choice Award 2011
  12. Knowing what you want to achieve before thinking of how to achieve it – a query optimization example
  13. Running SELECT … INTO :bind_variable from SQL
  14. Latch contention troubleshooting case study and Flashback Database performance issues with LOBs
  15. MOATS: The Mother of All Tuning Scripts!
  16. An index of my TPT scripts
  17. LOBREAD SQL Trace entry in Oracle 11.2 (and tracing OPI calls with event 10051)
  18. Implicit datatype conversion in the parsing phase – something new I learned today!
  19. ORA-4031 errors, contention, cursor management issues and shared pool fragmentation – free secret seminar!
  20. Exadata CAN do smart scans on bitmap indexes
  21. Oracle Exadata Performance series – Part 1: Should I use Hugepages on Linux Database Nodes?
  22. Finding Oracle Homes which Oracle instances are using on Linux
  23. New cursor_bind_capture_destination parameter in Oracle 11.2.0.2
  24. Performance Stories from Exadata Migrations
  25. Is this valid SQL syntax? :-)
  26. Snapper 3.52 – With Oracle 9.2 support!

2010 30

  1. Asynch descriptor resize wait event in Oracle
  2. A little new feature for shared pool geeks :-)
  3. COUNT STOPKEY operation (the where ROWNUM <= N predicate) doesn't process over ~4 Billion rows and returns wrong results
  4. Read currently running SQL statement’s bind variable values using V$SQL_MONITOR.BIND_XML in Oracle 11.2
  5. The most fundamental difference between hash and nested loop joins
  6. Oracle Closed World presentation links
  7. Which number takes more space in an Oracle row?
  8. Exadata v2 Smart Scan Performance Troubleshooting article
  9. Dropping and creating tables in read only tablespaces?!
  10. The full power of Oracle’s diagnostic events, part 2: ORADEBUG DOC and 11g improvements
  11. Oracle memory troubleshooting article
  12. Flexible Sqlplus command line history with RLWRAP
  13. Execution plan Quiz: Shouldn’t these row sources be the other way around ;-)
  14. Quiz: Explaining index creation
  15. cursor: pin S waits, sporadic CPU spikes and systematic troubleshooting
  16. KGH: NO ACCESS – Buffer cache inside streams pool too!
  17. Non-trivial performance problems
  18. Calculate SQL_ID and SQL_HASH_VALUE from SQL text
  19. Oracle Latch Contention Troubleshooting
  20. Oracle Session Snapper v3.10
  21. How to CANCEL a query running in another session?
  22. New versions of LatchProf and LatchProfX for latch contention troubleshooting and tuning
  23. Oracle Troubleshooting: How to read Oracle ERRORSTACK output?!
  24. Using Process Memory Matrix script for calculating Oracle process memory usage on Solaris
  25. Oracle Wait Event reference
  26. Oracle Peformance Visualization…
  27. Bind Variable Peeking – execution plan inefficiency
  28. Recursive sessions…
  29. Sometimes things are easy (Part 1): How to fix wrapped execution plan text?
  30. Beyond Oracle Wait Interface – Part 2

2009 41

  1. NULL is not zero!
  2. Measuring what matters
  3. Finding the reasons for excessive logical IOs
  4. Explain Plan For command may show you the wrong execution plan – Part 1
  5. Detect chained and migrated rows in Oracle – Part 1
  6. What’s a good way to learn some Oracle internals every day?
  7. SystemTap is production supported in Redhat EL5.4
  8. KGL simulator, shared pool simulator and buffer cache simulator – what are these?
  9. KGH: NO ACCESS allocations in V$SGASTAT – buffer cache within shared pool!
  10. Oracle 11gR2 has been released – and with column oriented storage option
  11. latch: cache buffers chains latch contention – a better way for finding the hot block
  12. Select COUNT(*) and COUNT(column) are different things!
  13. Alter system kill session and ORA-00031: session marked for kill
  14. An interview with me
  15. How to detect when a cursor was closed from SQL trace output?
  16. Identify the SQL statement causing those WAIT #X lines in a (top-truncated) sql tracefile
  17. (Secret) Preview of Oracle 12g CBO leaked from Oracle labs…
  18. Oracle memory troubleshooting, Part 3: Automatic top subheap dumping with heapdump
  19. Using Perfsheet and TPT scripts for solving real life performance problems
  20. ORA-04031 errors and monitoring shared pool subpool memory utilization with sgastatx.sql
  21. Oracle Performance Visualization videos from Sydney
  22. Scripts for showing execution plans via plain SQL and also in Oracle 9i
  23. “Free” DBA_HIST AWR views in 11g…
  24. I have been troubleshooting since I was a kid! :)
  25. Tracing Oracle SQL plan execution with DTrace
  26. Seminar feedback and pictures from Singapore
  27. Read OS environment variables using DBMS_SYSTEM.GET_ENV()
  28. I’m an Oracle ACE Director now :)
  29. Oracle 11g: Reading alert log via SQL
  30. Another LatchProfX use case
  31. The real history of Oracle database revealed!
  32. Oracle, Timesten and PL/SQL support
  33. The full power of Oracle’s diagnostic events, part 1: Syntax for KSD debug event handling
  34. 60000 bind variables?! Maybe it’s time to use a temporary table instead…
  35. SQL_ID is just a fancy representation of hash value
  36. Performance Visualization, Capacity planning and Hotsos Symposium
  37. When was a table last changed?
  38. Multipart cursor subexecution and PRECOMPUTE_SUBQUERY hint
  39. Identifying shared memory segment users using lsof
  40. Reliable latch waits and a new blog
  41. Oracle memory troubleshooting, Part 1: Heapdump Analyzer

2008 39

  1. Performance Visualization made easy – PerfSheet 2.0 beta
  2. A little oradebug enhancement in Oracle 11g
  3. Advanced Oracle Troubleshooting Guide, Part 9 – Process stack profiling from sqlplus using OStackProf
  4. Transportable tablespaces and ROWID uniqueness
  5. VLDB 2008 proceedings, Oracle optimizer plan stability, adaptive cursor sharing and SecureFiles
  6. Oracle hidden costs revealed, Part2 – Using DTrace to find why writes in SYSTEM tablespace are slower than in others
  7. Flexible sampling of any V$ or X$ view with sample.sql
  8. Case study on some rowcache internals, cached non-existent objects and a describe bug
  9. Why does even a small difference in SQL text cause a hard parse?
  10. Script: Display valid values for multioption parameters (including hidden parameters)
  11. The simplest query for checking what’s happening in a database
  12. Library cache latches gone in Oracle 11g
  13. Advanced Oracle Troubleshooting Guide, Part 8: Even more detailed latch troubleshooting using LatchProfX
  14. Closed database and WITH subquery
  15. Advanced Oracle Troubleshooting Guide, Part 7: Sampling latch holder statistics using LatchProf
  16. Another use case for WaitProf – diagnosing “events in waitclass Other”
  17. Killing an Oracle process from inside Oracle
  18. cursor_space_for_time To Be Deprecated
  19. Advanced Oracle Troubleshooting Guide, Part 6: Understanding Oracle execution plans with os_explain
  20. Debugger dangers
  21. Short note on KGX Mutexes
  22. Generating lots of rows using connect by – safely!
  23. Advanced Oracle Troubleshooting Guide, Part 5: Sampling V$ stuff with WaitProf. Really fast. Using SQL!
  24. Performance Tools Quick Reference Guide
  25. Advanced Oracle Troubleshooting Guide, Part 4: Diagnosing a long parsing issue
  26. Snapper shortcut
  27. Querying the current tracefile name, using SQL – with tracefile_identifier
  28. Oracle Troubleshooting with Snapper – detecting who’s causing excessive redo generation
  29. Performance and Scalalability Improvements in Oracle 10g and 11g
  30. Using autonomous transactions for sleeping
  31. SQL*Net break/reset to client
  32. SQL*Net message to client vs SQL*Net more data to client
  33. SQL*Net message to client wait isn’t really what it’s thought to be
  34. Oracle hidden costs revealed, part 1 – Does a batch job run faster when executed locally?
  35. Excellent article on Oracle 11g PL/SQL function result cache
  36. Can you write a working SQL statement without using any whitespace?
  37. Expensive calculator…
  38. Why does Oracle parameter count change during session lifetime?
  39. Systematic application troubleshooting in Unix

2007 19

  1. Perl version of Snapper
  2. Sqlplus is my second home, part 5: Reading the name of currently executing script
  3. Oracle Security, Part 2: Your read only accounts aren’t that read only
  4. Sqlplus is my second home, part 4: Getting sqlplus parameter value into a variable
  5. A simple interview question
  6. How to resolve SQL object and column names all the way to base tables and columns in Oracle?
  7. Advanced Oracle Troubleshooting Guide, Part 3: More adventures in process stack
  8. Sqlplus is my second home, part 3: Colored selections in Windows XP command prompt
  9. Sqlplus is my second home, part 2: Running SQL scripts from remote locations using HTTP
  10. Operating systems are lazy allocating memory
  11. Advanced Oracle Troubleshooting Guide, Part 2: No magic is needed, systematic approach will do
  12. Oracle Session Snapper, part 2: Getting most out of Snapper
  13. Oracle 11g internals part 1: Automatic Memory Management
  14. Oracle Session Snapper – real-time session-level performance stats for DBAs
  15. Sqlplus is my second home, Part 1: HTMLizing your sqlplus output
  16. Session-level statspack
  17. A gotcha with parallel index builds, parallel degree and query plans
  18. My version of SQL string to table tokenizer
  19. Advanced Oracle Troubleshooting Guide: When the wait interface is not enough [part 1]

2001 4

  1. Advanced Oracle SQL Tuning Training
  2. Confirmation
  3. Practical Linux Performance and Application Troubleshooting Training
  4. Thanks for Signing Up!