Understanding MySQL Internals
Table of Contents
Preface
How This Book Is Organized
Who This Book Is For
Conventions Used in This Book
Using Code Examples
Comments and Questions
Safari® Enabled
Acknowledgments
MySQL History and Architecture
MySQL History
MySQL Architecture
Core Modules
Interaction of the Core Modules
Detailed Look at the Core Modules
Server Initialization Module
Connection Manager
Thread Manager
Connection Thread
User Authentication Module
Access Control Module
Parser
Command Dispatcher
Query Cache Module
Optimizer
Table Manager
Table Modification Modules
Table Maintenance Module
Status Reporting Module
Abstracted Storage Engine Interface (Table Handler)
Storage Engine Implementations (MyISAM, InnoDB, MEMORY, Berkeley DB)
Logging Module
Replication Master Module
Replication Slave Module
Client/Server Protocol API
Low-Level Network I/O API
Core API
Nuts and Bolts of Working with the MySQL Source Code
Unix Shell
BitKeeper
Preparing the System to Build MySQL from BitKeeper Tree
Building MySQL from BitKeeper Tree
Building from Source Distribution
Installing MySQL into a System Directory
Source Code Directory Layout
Preparing the System to Run MySQL in a Debugger
Debugger-Guided Source Tour
Basics of Working with gdb
Finding Things in the Source
Interesting Breakpoints and Variables
Making a Source Modification
Coding Guidelines
Stability
Portability
Performance
Style and Ease of Integration
Keeping Your BitKeeper Repository Up to Date
Submitting a Patch
Core Classes, Structures, Variables, and APIs
THD
NET
TABLE
Field
Utility API Calls
Preprocessor Macros
Global Variables
Client/Server Communication
Protocol Overview
Packet Format
Relationship Between MySQL Protocol and OS Layer
Authenticating Handshake
Authentication Protocol Security
Protocol Capabilities Bit Mask
Command Packet
Server Responses
Data Field
OK Packet
Error Packet
EOF Packet
Result Set Packets
Configuration Variables
Configuration Variables Tutorial
Configuration File and Command-Line Options
Internals of the Configuration Option Parsing
Example of Adding a New Configuration Option
Interesting Aspects of Specific Configuration Variables
big-tables
concurrent-insert
core-file
default-storage-engine
delay-key-write
ft_stopword_file
innodb_buffer_pool_size
innodb_flush_log_at_trx_commit
innodb_file_per_table
innodb_lock_wait_timeout
innodb_force_recovery
init-file
key_buffer_size
language
log
log-bin
log-isam
log-slow-queries
max_allowed_packet
max_connections
max_heap_table_size
max_join_size
max_sort_length
myisam-recover
query_cache_type
read_buffer_size
relay-log
server-id
skip-grant-tables
skip-stack-trace
slave-skip-errors
sort_buffer_size
sql-mode
table_cache
temp-pool
transaction-isolation
Thread-Based Request Handling
Threads Versus Processes
Advantages of Using Threads
Disadvantages of Using Threads
Advantages of Using Forked Processes
Disadvantages of Using Forked Processes
Implementation of Request Handling
Structures, Variables, Classes, and API
Execution Walk-Through
Thread Programming Issues
Standard C Library Calls
Mutually Exclusive Locks (Mutexes)
Read-Write Locks
Synchronization
Preemption
The Storage Engine Interface
The handler Class
handlerton
Adding a Custom Storage Engine to MySQL
Integration Instructions for Version 4.1
Integration Instructions for Version 5.1
Concurrent Access and Locking
Table Lock Manager
Read Lock Request
Write Lock Request
Storage engine interaction with the table lock manager
InnoDB Locking
Lock types
Record locking
Dealing with deadlocks
Parser and Optimizer
Parser
Lexical Scanner
Grammar Rules Module
Parse Tree
Optimizer
Basics of the Optimizer Algorithm
Using EXPLAIN to Understand the Optimizer
Understanding the output of EXPLAIN
Select types
Record access types
Extra field
Range Optimizer
Range
Index_merge
Range_desc
Fulltext
ROR_intersect
ROR_union
Group_min_max
Subquery Optimization
Core Optimizer Classes and Structures
JOIN
JOIN_TAB
select_result
SELECT Parse Tree
Execution of a SELECT on the code level
Storage Engines
Shared Aspects of Architecture
MyISAM
MyISAM Architecture
Datafile
Index file
MyISAM Key Types
B-tree keys
Full-text keys
Spatial keys
InnoDB
Memory (Heap)
MyISAM Merge
NDB
Archive
Federated
Transactions
Overview of Transactional Storage Engine Implementation
Implementing the handler Subclass
Defining the handlerton
Working with the Query Cache
Working with the Replication Binary Log
Avoiding Deadlocks
Replication
Overview
Statement-Based Versus Row-Based Replication
Two-Threaded Slave
Multi-Master
SQL Commands to Help Understand Replication
Binary Log Format
Creating a Custom Replication Utility
Index