数码资讯
MySQL内存(全局缓存+线程缓存)的使用分析
首先,让我们看一个公式。MySQL中的内存分为两部分:全局内存和线程内存。 复制代码代码如下所示: per_thread_buffers =(read_buffer_size + read_rnd_buffer_size + + + + binlog_cache_size join_buffer_s
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
首先,让我们看一个公式。MySQL中的内存分为两部分:全局内存和线程内存。
复制代码代码如下所示:
per_thread_buffers =(read_buffer_size + read_rnd_buffer_size + + + + binlog_cache_size join_buffer_size sort_buffer_size thread_stack
+ tmp_table_size)* max_connections
global_buffers =
innodb_buffer_pool_size + + + + query_cache_size key_buffer_size innodb_log_buffer_size innodb_additional_mem_pool_size
total_memory = global_buffers + per_thread_buffers
全局缓存:
key_buffer_size:确定指标的处理速度,尤其是指数速度。默认值为16m,并通过检查状态值key_read_requests和key_reads,你可以知道key_buffer_size设置合理,key_reads / key_read_requests比应尽可能低,至少1:100、1:1000更好(此值可以得到by'key_read %,这是用来显示状态数据)。key_buffer_size只对MyISAM表的行为。即使你不使用MyISAM表,内部的临时磁盘表是MyISAM表,并使用该值。您可以使用检查状态value'created_tmp_disk_tables'to知道细节。
innodb_buffer_pool_size:InnoDB使用此参数指定的缓冲区数据和索引的内存的大小,这是在InnoDB引擎的最有影响力的参数。
innodb_additional_mem_pool_size:指定InnoDB使用存储数据字典和其他内部数据结构的内存池的大小。默认值为8m,通常不会太大,只要它是不够的,应该对该表的结构的复杂性有关。如果没有足够的,MySQL将在错误日志写一个警告信息。
innodb_log_buffer_size InnoDB:指定用来存储日志数据的缓存大小,如果你的表操作包含大量的并发事务(或大型交易),在提交事务请求日志文件,请尽量增加价值,以提高工作效率。
query_cache_size:是MySQL的查询缓存的大小。(从4.0.1,MySQL提供了查询缓冲机制)。使用查询缓冲区,MySQL存储在缓冲区中选择语句和查询结果。在未来,对于相同的SELECT语句(区分大小写),结果将是直接从缓冲区读取。根据MySQL的用户手册,最高238%的效率可以使用查询缓存实现。通过检查状态of'qcache_ %,我们可以看到,query_cache_size设置是合理的:如果qcache_lowmem_prunes价值是非常大的,往往显示缓冲区是不够的,如果qcache_hits价值是非常大的,它表明查询缓冲区使用频繁,需要增加缓冲区的大小;如果qcache_hits的价值在于你重复查询率很低,使用查询缓冲反而会影响效率,它可以不考虑查询缓冲区。此外,添加sql_no_cache我n SELECT语句可以清楚地表明不使用查询缓冲区。
线程缓存
每一个线程连接到MySQL服务器需要有自己的缓冲区,它可能是必要的256k立即分配,甚至当线程空闲,他们使用默认的线程堆栈,网络缓存,等等。在交易开始后,就需要更多的空间。运行小查询指定的线程可能在内存消耗只有少量增加,但如果对数据表做复杂的操作,如扫描、排序或需要一个临时表,你会安排read_buffer_size,sort_buffer_size,read_rnd_buffer_size,tmp_table_size记忆。但他们只配当他们需要时,他们是手术后立即释放。有些分配到单独的blocks.tmp_table_size可以MySQL可以分配到该操作的最大内存空间。
read_buffer_size:它是MySQL的大小读入缓冲区,顺序表的扫描请求将分配一个读入缓冲,MySQL会为它分配一个内存缓冲区,read_buffer_size变量控制这个缓冲区的大小。如果顺序扫描请求表频繁,你认为这种频繁的扫描速度太慢,你可以通过增加变量的值和内存缓冲区的大小增加的性能。
sort_buffer_size:由MySQL用于执行排序缓冲区的大小。如果你想增加订单的速度,先看看能否让你的MySQL使用索引,而不是额外的排序阶段。如果没有,你可以试着增加的sort_buffer_size可变尺寸。
read_rnd_buffer_size:是MySQL的随机读取缓冲区的大小。行时,以任何顺序阅读(例如,在顺序),随机读取缓存区将分配。当排序查询,MySQL将扫描缓冲区,从而避免磁盘搜索和提高查询速度。如果需要对大量数据进行排序,则可以适当地提高值,但MySQL将为每个客户连接分配缓冲空间,因此应尽可能适当地设置值,以避免过多的内存开销。
tmp_table_size:是临时表缓冲区大小的MySQL,工会是一个DML指令内完成,和大多数工会甚至可以没有一个临时表。大多数的临时表是基于内存的(堆)表。有一个大的记录长度的临时表(该列的所有长度的总和)或表包含BLOB列存储在硬盘上。如果内部堆(垛板台)大小超过tmp_table_size,MySQL可以自动改变堆表在内存中一个基于硬盘的MyISAM表。你也可以通过设置tmp_table_size选项增加临时表的大小。也就是说,如果价值提高,MySQL会同时增加heap表的大小,可以提高e连接的查询速度的效果。
thread_stack:主要用来存储每一个线程的标识信息,如线程ID、线程运行的基本信息等。我们可以设置thread_stack参数为每个线程的堆栈分配的内存。
join_buffer_size:应用程序通常会有一些两表(或表)连接操作要求,MySQL做一些联合的需求(全/指数加入),以减少对加入参与驱动的阅读来提高性能,需要加入缓冲协助加盟操作。当加入缓冲区太小,MySQL将不会被存储在磁盘文件的缓冲区,但第一次加入缓冲的结果集和联接表的连接操作,然后清除加入缓冲区中的数据,将结果集的其余部分写缓冲区,等等。这势必会造成驱动表被读取多次,复用IO访问效率降低。
binlog_cache_size:的二进制日志中的SQL语句在交易过程中的高速缓存大小。二进制日志缓存是由服务器分配给事务存储引擎和服务器内存启用了二进制日志(日志本选项)为每个客户端分配内存。值得注意的是,每一个客户都可以分配的集合大小的binlog缓存空间。如果多个声明交易往往出现在系统中,你可以尝试增加值的大小来获得更好的性能。当然,我们可以预测binlog_cache_size现状通过MySQL的以下两个状态变量:binlog_cache_use和binlog_cache_disk_use.max_binlog_cache_size:对应于binlog_cache_size 当我们执行多个语句的事务,如果max_binlog_cache_size不够大,系统会报告错误多语句的事务需要更多的存储than'max_binlog_cache_size'bytes。
It is important to note that table_cache represents the number of tables open by all threads and has nothing to do with memory.
复制代码代码如下所示:
per_thread_buffers =(read_buffer_size + read_rnd_buffer_size + + + + binlog_cache_size join_buffer_size sort_buffer_size thread_stack
+ tmp_table_size)* max_connections
global_buffers =
innodb_buffer_pool_size + + + + query_cache_size key_buffer_size innodb_log_buffer_size innodb_additional_mem_pool_size
total_memory = global_buffers + per_thread_buffers
全局缓存:
key_buffer_size:确定指标的处理速度,尤其是指数速度。默认值为16m,并通过检查状态值key_read_requests和key_reads,你可以知道key_buffer_size设置合理,key_reads / key_read_requests比应尽可能低,至少1:100、1:1000更好(此值可以得到by'key_read %,这是用来显示状态数据)。key_buffer_size只对MyISAM表的行为。即使你不使用MyISAM表,内部的临时磁盘表是MyISAM表,并使用该值。您可以使用检查状态value'created_tmp_disk_tables'to知道细节。
innodb_buffer_pool_size:InnoDB使用此参数指定的缓冲区数据和索引的内存的大小,这是在InnoDB引擎的最有影响力的参数。
innodb_additional_mem_pool_size:指定InnoDB使用存储数据字典和其他内部数据结构的内存池的大小。默认值为8m,通常不会太大,只要它是不够的,应该对该表的结构的复杂性有关。如果没有足够的,MySQL将在错误日志写一个警告信息。
innodb_log_buffer_size InnoDB:指定用来存储日志数据的缓存大小,如果你的表操作包含大量的并发事务(或大型交易),在提交事务请求日志文件,请尽量增加价值,以提高工作效率。
query_cache_size:是MySQL的查询缓存的大小。(从4.0.1,MySQL提供了查询缓冲机制)。使用查询缓冲区,MySQL存储在缓冲区中选择语句和查询结果。在未来,对于相同的SELECT语句(区分大小写),结果将是直接从缓冲区读取。根据MySQL的用户手册,最高238%的效率可以使用查询缓存实现。通过检查状态of'qcache_ %,我们可以看到,query_cache_size设置是合理的:如果qcache_lowmem_prunes价值是非常大的,往往显示缓冲区是不够的,如果qcache_hits价值是非常大的,它表明查询缓冲区使用频繁,需要增加缓冲区的大小;如果qcache_hits的价值在于你重复查询率很低,使用查询缓冲反而会影响效率,它可以不考虑查询缓冲区。此外,添加sql_no_cache我n SELECT语句可以清楚地表明不使用查询缓冲区。
线程缓存
每一个线程连接到MySQL服务器需要有自己的缓冲区,它可能是必要的256k立即分配,甚至当线程空闲,他们使用默认的线程堆栈,网络缓存,等等。在交易开始后,就需要更多的空间。运行小查询指定的线程可能在内存消耗只有少量增加,但如果对数据表做复杂的操作,如扫描、排序或需要一个临时表,你会安排read_buffer_size,sort_buffer_size,read_rnd_buffer_size,tmp_table_size记忆。但他们只配当他们需要时,他们是手术后立即释放。有些分配到单独的blocks.tmp_table_size可以MySQL可以分配到该操作的最大内存空间。
read_buffer_size:它是MySQL的大小读入缓冲区,顺序表的扫描请求将分配一个读入缓冲,MySQL会为它分配一个内存缓冲区,read_buffer_size变量控制这个缓冲区的大小。如果顺序扫描请求表频繁,你认为这种频繁的扫描速度太慢,你可以通过增加变量的值和内存缓冲区的大小增加的性能。
sort_buffer_size:由MySQL用于执行排序缓冲区的大小。如果你想增加订单的速度,先看看能否让你的MySQL使用索引,而不是额外的排序阶段。如果没有,你可以试着增加的sort_buffer_size可变尺寸。
read_rnd_buffer_size:是MySQL的随机读取缓冲区的大小。行时,以任何顺序阅读(例如,在顺序),随机读取缓存区将分配。当排序查询,MySQL将扫描缓冲区,从而避免磁盘搜索和提高查询速度。如果需要对大量数据进行排序,则可以适当地提高值,但MySQL将为每个客户连接分配缓冲空间,因此应尽可能适当地设置值,以避免过多的内存开销。
tmp_table_size:是临时表缓冲区大小的MySQL,工会是一个DML指令内完成,和大多数工会甚至可以没有一个临时表。大多数的临时表是基于内存的(堆)表。有一个大的记录长度的临时表(该列的所有长度的总和)或表包含BLOB列存储在硬盘上。如果内部堆(垛板台)大小超过tmp_table_size,MySQL可以自动改变堆表在内存中一个基于硬盘的MyISAM表。你也可以通过设置tmp_table_size选项增加临时表的大小。也就是说,如果价值提高,MySQL会同时增加heap表的大小,可以提高e连接的查询速度的效果。
thread_stack:主要用来存储每一个线程的标识信息,如线程ID、线程运行的基本信息等。我们可以设置thread_stack参数为每个线程的堆栈分配的内存。
join_buffer_size:应用程序通常会有一些两表(或表)连接操作要求,MySQL做一些联合的需求(全/指数加入),以减少对加入参与驱动的阅读来提高性能,需要加入缓冲协助加盟操作。当加入缓冲区太小,MySQL将不会被存储在磁盘文件的缓冲区,但第一次加入缓冲的结果集和联接表的连接操作,然后清除加入缓冲区中的数据,将结果集的其余部分写缓冲区,等等。这势必会造成驱动表被读取多次,复用IO访问效率降低。
binlog_cache_size:的二进制日志中的SQL语句在交易过程中的高速缓存大小。二进制日志缓存是由服务器分配给事务存储引擎和服务器内存启用了二进制日志(日志本选项)为每个客户端分配内存。值得注意的是,每一个客户都可以分配的集合大小的binlog缓存空间。如果多个声明交易往往出现在系统中,你可以尝试增加值的大小来获得更好的性能。当然,我们可以预测binlog_cache_size现状通过MySQL的以下两个状态变量:binlog_cache_use和binlog_cache_disk_use.max_binlog_cache_size:对应于binlog_cache_size 当我们执行多个语句的事务,如果max_binlog_cache_size不够大,系统会报告错误多语句的事务需要更多的存储than'max_binlog_cache_size'bytes。
It is important to note that table_cache represents the number of tables open by all threads and has nothing to do with memory.
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。