InnoDB配置
- InnoDB启动配置
- 有关InnoDB配置的第一个决定涉及数据文件,日志文件,页面大小和内存缓冲区的配置。建议您在创建InnoDB实例之前定义数据文件,日志文件和页面大小配置。InnoDB创建实例后修改数据文件或日志文件配置可能涉及不平凡的过程,并且仅在InnoDB首次初始化实例时才能定义页面大小。除了这些主题之外,本节
- InnoDB配置为只读操作
- InnoDB通过--innodb-read-only在服务器启动时启用配置选项来查询MySQL数据目录位于只读介质上的表。如何启用要为只读操作准备实例,请确保将所有必需的信息刷新到数据文件,然后再将其存储在只读介质上。在禁用更改缓冲(innodb_change_buffering=0)的情况下运行服
- 配置InnoDB缓冲池大小
- InnoDB在服务器运行时脱机(启动时)或联机配置缓冲池大小。本节中描述的行为适用于两种方法。有关在线配置缓冲池大小的更多信息,请参见在线配置InnoDB缓冲池大小。当增加或减少时innodb_buffer_pool_size,将按块执行操作。块大小由innodb_buffer_pool_chunk
- 配置多个缓冲池实例
- 对于缓冲池在数千兆字节范围内的系统,将缓冲池划分为多个单独的实例可以通过减少争用不同线程读写缓存页面的争用来提高并发性。此功能通常用于缓冲池大小在数GB范围内的系统。使用innodb_buffer_pool_instances配置选项配置了多个缓冲池实例,您也可以调整该innodb_buffer_p
- 使缓冲池扫描具有抵抗性
- 与其使用严格的LRU 算法,不如使用一种InnoDB技术来最小化被带入缓冲池并且永远不会再次访问的数据量。目的是确保经常访问的(“热”)页保留在缓冲池中,即使预读和全表扫描会引入新的块,这些块以后也可能不会访问。新读取的块将插入到LRU列表的中间。默认情况下,所有新读取的页面都插入3/8到LRU列表
- 配置InnoDB缓冲池预取(预读)
- 一个预读请求是I / O请求预取的多个页面缓冲池异步,在期待这些页面将很快需要。这些请求将所有页面集中到一个范围。InnoDB使用两种预读算法来提高I / O性能:线性预读是一种技术,该技术根据顺序访问的缓冲池中的页面来预测很快可能需要哪些页面。您可以InnoDB使用配置参数调整触发异步读取请求所需
- 配置缓冲池刷新
- InnoDB在后台执行某些任务,包括从缓冲池中清除脏页。脏页是指已被修改但尚未写入磁盘上数据文件的页。在MySQL 8.0中,缓冲池刷新是由页面清理程序线程执行的。页面清洁程序线程的数量由innodb_page_cleaners变量控制,该变量的默认值为4。当脏页的百分比达到innodb_max_d
- 保存和恢复缓冲池状态
- 为了减少重新启动服务器后的预热时间,请InnoDB在服务器关闭时为每个缓冲池保存最近使用的页面的百分比,并在服务器启动时恢复这些页面。存储的最近使用页面的百分比由innodb_buffer_pool_dump_pct配置选项定义。重新启动繁忙的服务器后,通常会有一个预热期,吞吐量会稳定增加,这是因为
- 从核心文件中排除缓冲池页面
- 核心文件记录正在运行的进程的状态和内存映像。因为缓冲池驻留在主内存中,并且正在运行的进程的内存映像被转储到核心文件,所以当mysqld进程终止时,具有较大缓冲池的系统可以生成大型核心文件。大型核心文件可能会因许多原因而出现问题,包括写入它们所花费的时间,它们消耗的磁盘空间量以及与传输大型文件相关的挑
- 配置InnoDB线程并发
- InnoDB使用操作系统线程来处理来自用户事务的请求。(事务InnoDB在提交或回滚之前可能会发出许多请求。)在具有多核处理器的现代操作系统和服务器上,上下文切换是有效的,大多数工作负载运行良好,并且并发线程数没有任何限制。在有助于最大程度地减少线程之间的上下文切换的情况下,InnoDB可以使用多种
- 配置InnoDB后台 I / O线程数
- InnoDB使用后台线程服务各种类型的I / O请求。您可以使用innodb_read_io_threads和innodb_write_io_threads配置参数配置服务于数据页上的I / O读写的后台线程数。这些参数分别表示用于读取和写入请求的后台线程数。它们在所有受支持的平台上均有效。您可以在
- 在Linux上使用异步I / O
- InnoDB在Linux上使用异步I / O子系统(本机AIO)对数据文件页执行预读和写请求。此行为由innodb_use_native_aio配置选项控制,该选项仅适用于Linux系统,并且默认情况下处于启用状态。在其他类似Unix的系统上,InnoDB仅使用同步I / O。历史上,InnoDB仅
- 配置InnoDB I / O容量
- 在InnoDB主线程和其他线程在后台执行各种任务,其中大部分是I / O相关的,如从缓冲池刷新脏页,写从改变缓冲更改相应的二级指标。InnoDB尝试以不会对服务器的正常工作产生不利影响的方式执行这些任务。它尝试估计可用的I / O带宽并调整其活动以利用可用容量。该innodb_io_capacity
- 配置自旋锁定轮询
- InnoDB互斥锁和 rw锁通常保留较短的时间间隔。在多核系统上,线程在睡眠之前的一段时间内连续检查它是否可以获取互斥或rw-lock可能会更有效率。如果在此期间互斥锁或rw-lock可用,则线程可以在同一时间片中立即继续。但是,通过多个线程对共享对象(例如互斥锁或rw-lock)进行太频繁的轮询会
- 清除InnoDB配置
- InnoDB使用SQL语句删除行时,不会立即从数据库中物理删除行。仅当InnoDB丢弃为删除而编写的撤消日志记录时,才物理删除行及其索引记录。这种删除操作仅发生在不再需要多版本并发控制(MVCC)或回滚的行之后,称为清除。清除会定期执行。它从历史记录列表中解析和处理撤消日志页面,该历史记录列表是由I
- 配置持久性优化器统计信息
- 本节介绍如何为表配置持久性和非持久性优化器统计信息InnoDB。持续的优化程序统计信息在服务器重新启动后会保留下来,从而提高了计划的稳定性和查询性能的一致性。持久性优化器统计信息还具有以下额外好处,从而提供了控制和灵活性:您可以使用innodb_stats_auto_recalc配置选项来控制在对表
- 配置非持久性优化器统计参数
- 本节介绍如何配置非持久性优化器统计信息。当innodb_stats_persistent=OFF或使用创建或更改单个表时,Optimizer统计信息不会保留在磁盘上STATS_PERSISTENT=0。相反,统计信息存储在内存中,并且在服务器关闭时会丢失。统计信息还可以通过某些操作在特定条件下定期更
- 估算InnoDB表的分析表复杂度
- ANALYZE TABLEInnoDB表的复杂度取决于:所定义的采样页数innodb_stats_persistent_sample_pages。表中索引列的数量分区数。如果表没有分区,则分区数被视为1。使用这些参数,估算ANALYZE TABLE复杂度的近似公式为:值innodb_stats_pe
- 配置索引页的合并阈值
- 您可以配置MERGE_THRESHOLD索引页的值。如果删除某行或操作缩短某行时索引页的“ page-full ”百分比低于该MERGE_THRESHOLD值UPDATE,则InnoDB尝试将索引页与相邻索引页合并。默认MERGE_THRESHOLD值为50,这是以前的硬编码值。最小值MERGE_T
- 为专用的MySQL服务器启用自动配置
- 当innodb_dedicated_server启用时,InnoDB会自动配置以下变量:innodb_buffer_pool_sizeinnodb_log_file_sizeinnodb_log_files_in_group(自MySQL 8.0.14起)innodb_flush_method仅in
本节提供了有关InnoDB
初始化,启动以及InnoDB
存储引擎的各种组件和功能的配置信息和过程。有关优化InnoDB
表的数据库操作的信息,请参见“优化InnoDB表”。