mysql内存参数分类合集
发布时间:2022-04-06 11:15:36 所属栏目:MySql教程 来源:互联网
导读:内存参数: 存储引擎/共享 日志缓冲区,缓冲区池 innodb_buffer_pool_size innodb_additional_mem_pool_size innodb_log_buffer_size 服务器/共享 查询调整缓存 线程高速络缓存 query_cache table_cahce table_definition_cache 连接/会话 排序缓冲区,读
内存参数: 存储引擎/共享 日志缓冲区,缓冲区池 innodb_buffer_pool_size innodb_additional_mem_pool_size innodb_log_buffer_size 服务器/共享 查询调整缓存 线程高速络缓存 query_cache table_cahce table_definition_cache 连接/会话 排序缓冲区,读取缓冲区,临时表 binlog_cache_size read_buffer_size read_rnd_buffer_size join_buffer_size sort_buffer_size tmp_table_size thread_cache_size bulk_insert_buffer_size net_buffer_length thread_stack *.线程独享内存 *.全局共享内存 全局共享内存类似ORACLE的系统全局区SGA,线程独享内存类似ORACLE的进程全局区PGA 一、线程独享内存 在MySQL中,线程独享内存主要用于各客户端连接线程存储各种操作的独享数据,如线程栈信息,分组排序操作,数据读写缓冲,结果集暂存等等,而且大多数可以通过相关参数来控制内存的使用量。 * Join操作使用内存(join_buffer_size): 应用程序经常会出现一些两表(或多表)Join的操作需求,MySQL在完成某些Join需求的时候(all/index join),为了减少参与Join的“被驱动表”的读取次数以提高性能,需要使用到Join Buffer来协助完成Join操作 (具体Join实现算法请参考:MySQL中的 Join 基本实现原理)。当Join Buffer太小,MySQL 不会将该Buffer存入磁盘文件,而是先将Join Buffer中的结果集与需要Join的表进行Join操作,然后清空Join Buffer中的数据, 继续将剩余的结果集写入此Buffer中,如此往复。这势必会造成被驱动表需要被多次读取,成倍增加IO访问,降低效率。 什么时候会用到? 当查询必须连接两个表(或多个)的数据集并且不能使用索引时,这个缓冲区会被用到。这个缓冲区专门为每个线程的无索引链接操作准备的。 使用确认: 可以通过查询计划中的Extra列的值为Using join bufer来证实使用了和这个缓冲区。 >explain select * from user1; +------+-------------+-------+-------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +------+-------------+-------+-------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | user1 | index | NULL | name | 78 | NULL | 3 | Using index | +------+-------------+-------+-------+---------------+------+---------+------+------+-------------+ Global Session,Dynamic,Default 128K 各版本平台最大值不一样 推荐配置:8M(内存足够的情况下),默认(内存紧张的情况) 优化建议:有一种说法是增加这个缓冲区的大小不会加快全连接操作的速度。目前我没有实验证实。 * 批量插入暂存使用内存(bulk_insert_buffer_size): 当我们使用如 insert … values(…),(…),(…)… 的方式进行批量插入的时候,MySQL会先将提交的数据放如一个缓存空间中,当该缓存空间被写满或者提交完所有数据之后,MySQL才会一次性将该缓存空间中的数据写入数据库并清空缓存。 此外,当我们进行 LOAD DATA INFILE操作来将文本文件中的数据Load进数据库的时候,同样会使用到此缓冲区。 Global Session,Dynamic,Default 8M 推荐配置:默认 8M * 临时表使用内存(tmp_table_size): 当我们进行一些特殊操作如需要使用临时表才能完成的Order By,Group By 等等,MySQL可能需要使用到临时表。当我们的临时表较小(小于tmp_table_size 参数所设置的大小)的时候,MySQL会将临时表创建成内存临时表, 只有当tmp_table_size所设置的大小无法装下整个临时表的时候,MySQL才会将该表创建成MyISAM存储引擎的表存放在磁盘上。不过,当另一个系统参数 max_heap_table_size 的大小还小于 tmp_table_size 的时候, MySQL将使用 max_heap_table_size 参数所设置大小作为最大的内存临时表大小,而忽略tmp_table_size 所设置的值。而且 tmp_table_size 参数从 MySQL 5.1.2 才开始有,之前一直使用 max_heap_table_size。 谁小谁生效.另外还有一个参数max_tmp_tables,没有使用 tmp_table_size Global Session,Dynamic,Default 16M 推荐配置:64M max_heap_table_size Global Session,Dynamic,Default 8M This variable sets the maximum size to which user-created MEMORY tables are permitted to grow 这个变量定义了MEMORY存储引擎表的最大容量。 二、全局共享内存 全局共享内则主要是MySQL Instance以及底层存储引擎用来暂存各种全局运算及可共享的暂存信息,如 存储查询缓存的 Query Cache, 缓存连接线程的 Thread Cache。 * MyISAM索引缓存 Key Buffer(key_buffer_size): MyISAM 索引缓存将MyISAM表的索引信息(.MYI文件)缓存在内存中,以提高其访问性能。这个缓存可以说是影响MyISAM存储引擎性能的最重要因素之一了,通过 key_buffere_size 设置可以使用的最大内存空间。 注意:即使运行一个全部采用innodb的模式,仍需要定义一个索引码缓冲区,因为MYSQL元信息与MyISAM定义相同。 Global ,Dynamic,Default 8M 推荐配置:默认 8M 如何确认key_buffer_size不够用? 使用show full proceslist的State列中,值Repairing the keycache是一个明显的指标,它指出当前索引码缓冲区大小不足以执行当前运行的SQL语句。这将导致额外的磁盘I/O开销。 (编辑:锡盟站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐