If you follow the best practices for database design and the
tuning techniques for SQL operations, but your database is still
slowed by heavy disk I/O activity, explore these low-level
techniques related to disk I/O. 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.
When table data is cached in the
InnoDBbuffer pool, it can be processed over and over by queries without requiring any disk I/O. Specify the size of the buffer pool with theinnodb_buffer_pool_sizeoption. This memory area is important enough that busy databases often specify a size approximately 80% of the amount of of physical memory. For more information, see Section 7.9.1, “TheInnoDBBuffer Pool”.In some versions of GNU/Linux and Unix, flushing files to disk with the Unix
fsync()call (whichInnoDBuses by default) and similar methods is surprisingly slow. If database write performance is an issue, conduct benchmarks with theinnodb_flush_methodparameter set toO_DSYNC.When using the
InnoDBstorage engine on Solaris 10 for x86_64 architecture (AMD Opteron), use direct I/O forInnoDB-related files, to avoid degradation ofInnoDBperformance. To use direct I/O for an entire UFS file system used for storingInnoDB-related files, mount it with theforcedirectiooption; seemount_ufs(1M). (The default on Solaris 10/x86_64 is not to use this option.) To apply direct I/O only toInnoDBfile operations rather than the whole filesystem, setinnodb_flush_method = O_DIRECT. With this setting,InnoDBcallsdirectio()instead offcntl()for I/O to data files (not for I/O to log files).When using the
InnoDBstorage engine with a largeinnodb_buffer_pool_sizevalue on any release of Solaris 2.6 and up and any platform (sparc/x86/x64/amd64), conduct benchmarks withInnoDBdata files and log files on raw devices or on a separate direct I/O UFS file system, using theforcedirectiomount option as described earlier. (It is necessary to use the mount option rather than settinginnodb_flush_methodif you want direct I/O for the log files.) Users of the Veritas file system VxFS should use theconvosync=directmount option.Do not place other MySQL data files, such as those for
MyISAMtables, on a direct I/O file system. Executables or libraries must not be placed on a direct I/O file system.If you have additional storage devices available to set up a RAID configuration or symbolic links to different disks, Section 7.11.3, “Optimizing Disk I/O” for additional low-level I/O tips.