Keeping data plus index-data in memory - InnoDB vs. MyISAM

后端 未结 1 481
攒了一身酷
攒了一身酷 2021-02-14 04:11

Assume a database consisting of 1 GB of data and 1 GB of index data.

To minimize disk IO and hence maximize performance I want to allocate memory to MySQL so that the en

1条回答
  •  臣服心动
    2021-02-14 04:43

    • No MyISAM has no general purpose data cache. This is documented in the "key_buffer_size" description from the official documentation: This is because MySQL relies on the operating system to perform file system caching for data reads, so you must leave some room for the file system cache.

    Modern OSes, especially Linux, tend to have very smart virtual memory subsystems that will keep frequently accessed files in the page cache, so disk I/O is kept at a bare minimum when the working set fits in available memory.

    • So to answer your second question: never.

    It's important not to fall into "buffer oversizing" too for the various myisam variables such as read_buffer_size, read_rnd_buffer_size, sort_buffer_size, join_buffer_size, etc as some are dynamically allocated, so bigger doesn't always mean faster - and sometimes it can even be slower - see this post on mysqlperformanceblog for a very interesting case.

    If you're on 5.1 on a posix platform, you might want to benchmark myisam_use_mmap on your workload, it's supposed to help high contention cases by reducing the quantity of malloc() calls.

    0 讨论(0)
提交回复
热议问题