Welcome to my blog with a new (beta) design. I'm still tweaking things, so layout and formatting stuff will change.
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!
Hadoop for Database Professionals class at NoCOUG Fall Conference on 9th Nov
Hadoop for Database Professionals - St. Louis (7. Sep)
Apache Impala Internals Deep Dive with Tanel Poder + Gluent New World Training Month
I'm speaking at Advanced Spark Meetup & attending Deep Learning Workshop in San Francisco
GNW05 - Extending Databases With the Full Power of Hadoop: How Gluent Does It
Gluent Podcast with Mark Rittman
Dallas Oracle User Group Performance & 12.2 New Features Technical Day
Gluent New World #03: Real Time Stream Processing in Modern Enterprises with Gwen Shapira
Gluent New World #02: SQL-on-Hadoop with Mark Rittman
Gluent Demo Video Launch
GNW01: In-Memory Processing for Databases
Gluent New World: In-Memory Processing for Databases
My BIWA Summit Presentations
Public Appearances H1 2016
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
Connecting Hadoop and Oracle
My Oracle OpenWorld presentations
Advanced Oracle Troubleshooting v2.5 (with 12c stuff too)
RAM is the new disk – and how to measure its performance – Part 2 – Tools
We are hiring!
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
Public Appearances 2015
Oracle In-Memory Column Store Internals - Part 1 - Which SIMD extensions are getting used?
My presentations at OOW 2014 (See you there!)
About index range scans, disk re-reads and how your new car can go 600 miles per hour!
Our take on the Oracle Database 12c In-Memory Option
Combining Bloom Filter Offloading and Storage Indexes on Exadata
Enkitec + Accenture = Even More Awesomeness!
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?
Hotsos Symposium 2014
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 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 - 22.214.171.124)
Enkitec Rocks Again!!!
Why doesn't ALTER SYSTEM SET EVENTS set the events or tracing immediately?
Subscribing via email / RSS
Advanced Oracle Troubleshooting Guide - Part 11: Complex Wait Chain Signature Analysis with ash_wait_chains.sql
I will be speaking at Oracle OpenWorld and Strata + HadoopWorld NY
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 (126.96.36.199.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
Oracle Database 11.2 Upgrade and Migration slides
How to Compose New Gmail Messages in Full Screen (instead of the tiny compose box of new Gmail)
Public Appearances and Exadata Performance Training
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 here
Are you getting the most out of your Exadata performance? Part 1
Enabling and Reading event 10046 / SQL Trace
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
For Exadata geeks
Backups are forever
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 188.8.131.52
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
A: The most fundamental difference between hash and nested loop joins
Q: 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
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
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
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
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?
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
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]