8.5 Optimizing for InnoDB Tables

*note 'InnoDB': innodb-storage-engine. is the storage engine that MySQL customers typically use in production databases where reliability and concurrency are important. 'InnoDB' is the default storage engine in MySQL. This section explains how to optimize database operations for 'InnoDB' tables.

 File: manual.info.tmp, Node: optimizing-innodb-storage-layout, Next: optimizing-innodb-transaction-management, Prev: optimizing-innodb, Up: optimizing-innodb

8.5.1 Optimizing Storage Layout for InnoDB Tables

 File: manual.info.tmp, Node: optimizing-innodb-transaction-management, Next: innodb-performance-ro-txn, Prev: optimizing-innodb-storage-layout, Up: optimizing-innodb

8.5.2 Optimizing InnoDB Transaction Management

To optimize 'InnoDB' transaction processing, find the ideal balance between the performance overhead of transactional features and the workload of your server. For example, an application might encounter performance issues if it commits thousands of times per second, and different performance issues if it commits only every 2-3 hours.

 File: manual.info.tmp, Node: innodb-performance-ro-txn, Next: optimizing-innodb-logging, Prev: optimizing-innodb-transaction-management, Up: optimizing-innodb

8.5.3 Optimizing InnoDB Read-Only Transactions

'InnoDB' can avoid the overhead associated with setting up the transaction ID ('TRX_ID' field) for transactions that are known to be read-only. A transaction ID is only needed for a transaction that might perform write operations or locking reads such as 'SELECT ... FOR UPDATE'. Eliminating unnecessary transaction IDs reduces the size of internal data structures that are consulted each time a query or data change statement constructs a read view.

'InnoDB' detects read-only transactions when:

Thus, for a read-intensive application such as a report generator, you can tune a sequence of 'InnoDB' queries by grouping them inside note 'START TRANSACTION READ ONLY': commit. and note 'COMMIT': commit, or by turning on the 'autocommit' setting before running the 'SELECT' statements, or simply by avoiding any data change statements interspersed with the queries.

For information about note 'START TRANSACTION': commit. and 'autocommit', see note commit::.

Note:

Transactions that qualify as auto-commit, non-locking, and read-only (AC-NL-RO) are kept out of certain internal 'InnoDB' data structures and are therefore not listed in *note 'SHOW ENGINE INNODB STATUS': show-engine. output.

 File: manual.info.tmp, Node: optimizing-innodb-logging, Next: optimizing-innodb-bulk-data-loading, Prev: innodb-performance-ro-txn, Up: optimizing-innodb

8.5.4 Optimizing InnoDB Redo Logging

Consider the following guidelines for optimizing redo logging:

 File: manual.info.tmp, Node: optimizing-innodb-bulk-data-loading, Next: optimizing-innodb-queries, Prev: optimizing-innodb-logging, Up: optimizing-innodb

8.5.5 Bulk Data Loading for InnoDB Tables

These performance tips supplement the general guidelines for fast inserts in *note insert-optimization::.

 File: manual.info.tmp, Node: optimizing-innodb-queries, Next: optimizing-innodb-ddl-operations, Prev: optimizing-innodb-bulk-data-loading, Up: optimizing-innodb

8.5.6 Optimizing InnoDB Queries

To tune queries for 'InnoDB' tables, create an appropriate set of indexes on each table. See *note mysql-indexes:: for details. Follow these guidelines for 'InnoDB' indexes:

 File: manual.info.tmp, Node: optimizing-innodb-ddl-operations, Next: optimizing-innodb-diskio, Prev: optimizing-innodb-queries, Up: optimizing-innodb

8.5.7 Optimizing InnoDB DDL Operations

 File: manual.info.tmp, Node: optimizing-innodb-diskio, Next: optimizing-innodb-configuration-variables, Prev: optimizing-innodb-ddl-operations, Up: optimizing-innodb

8.5.8 Optimizing InnoDB Disk I/O

If you follow best practices for database design and tuning techniques for SQL operations, but your database is still slow due to heavy disk I/O activity, consider these disk I/O optimizations. If the Unix 'top' tool or the Windows Task Manager shows that the CPU usage percentage with your workload is less than 70%, your workload is probably disk-bound.

 File: manual.info.tmp, Node: optimizing-innodb-configuration-variables, Next: optimizing-innodb-many-tables, Prev: optimizing-innodb-diskio, Up: optimizing-innodb

8.5.9 Optimizing InnoDB Configuration Variables

Different settings work best for servers with light, predictable loads, versus servers that are running near full capacity all the time, or that experience spikes of high activity.

Because the 'InnoDB' storage engine performs many of its optimizations automatically, many performance-tuning tasks involve monitoring to ensure that the database is performing well, and changing configuration options when performance drops. See *note innodb-performance-schema:: for information about detailed 'InnoDB' performance monitoring.

The main configuration steps you can perform include:

 File: manual.info.tmp, Node: optimizing-innodb-many-tables, Prev: optimizing-innodb-configuration-variables, Up: optimizing-innodb

8.5.10 Optimizing InnoDB for Systems with Many Tables

 File: manual.info.tmp, Node: optimizing-myisam, Next: optimizing-memory-tables, Prev: optimizing-innodb, Up: optimization