- 2013-09-29国务院近日印发了上海自由贸易试验区总体方案,自贸区...
- 2013-09-29移动医疗大潮袭来,看着是肉 咬下去是骨头。
- 2013-09-28安卓阵营集体遭360洗劫,华为三星步步高悉数中枪
- 2013-09-28小米MIUI团队声明称应用商店内全线下架360产品
- 2013-09-25阿里巴巴与云存储应用酷盘的收购谈判行已结束,阿里巴...
- 2013-09-25苹果称其全新Touch ID指纹扫描安全系统可以“十分安全...
- 2013-09-24上海自贸区不设防火墙 脸谱和推特等解禁
- 2013-09-24Fairfax Financial计划收购黑莓:每股9美元 总价47亿美...
- 2013-09-24消息称苏宁洽购PPTV进入尾声 金额约为4亿美元
- 2013-09-238月25日凌晨,中国.CN域名解析出现大规模解析故障,攻击...
MYSQL的主要参数设置(优化)
1、 key_buffer_size(针对myisam)
是指定索引缓冲区的大小,决定了索引处理的速度。对于mysql5.0这个变量最大的上限是4GB。但是如果是mysql5.1以上的版本则允许更大的值。通过创建多个缓冲区,可以一次在内存中保存4G以上的索引。例如:在配置文件my.ini中加上:
key_buffer _size = 4G
key_buffer_1.key_buffer_size = 1G
key_buffer_2.key_buffer_size = 1G
现在就可以有3个缓冲区了,可以通过cache index命令来将表映射到缓存中。例如将表t1和t2索引保存到key_buffer_1;
mysql> cache index t1,t2 in key_buffer_1;
还可以用load index将表的索引预先加载到缓存中;
mysql> load index into cache t1,t2;
key_buffer_size这个参数可以根据show status和show variables查看的使用情况和性能设置。可以先使用默认的设置,在通过计算缓存命中率和缓存使用百分比来考虑是否需要调整。缓存命中率的计算公式:100-((key_reads*100)/key_read_requests)
其中的key_reads、key_read_requests可以通过show status来查看,例如:
mysql> show status like 'key_read%';
+-------------------+----------+
| Variable_name | Value |
+-------------------+----------+
| Key_read_requests | 27455182 |
| Key_reads | 680745 |
+-------------------+----------+
2 rows in set (0.00 sec)
key_reads表示从硬盘中读取的次数,也就是在缓存中没有读到的请求次数
key_read_requests表示总共有多少次索引请求
上面的例子中我们可以计算出缓存命中率约是99.98%,可以表明key_buffer_size设置是足够的。
缓存使用百分比的计算公式:
100-((key_blocks_unused*key_cache_block_size)*100/key_buffer_size)
其中的参数也是通过show status来查看的,例如:
mysql> show status like 'key_blocks_u%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Key_blocks_unused | 14219 |
| Key_blocks_used | 14347 |
+-------------------+-------+
2 rows in set (0.00 sec)
Mysql> show variables like 'key_cache_block_size';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| key_cache_block_size | 1024 |
+----------------------+-------+
1 row in set (0.00 sec)
Key_blocks_unused表示未使用的缓存簇(blocks)数
Key_blocks_used表示表示曾经用到的最大的blocks数
key_cache_block_size表示索引缓冲区块的大小,单位是字节
上面的例子我们可以计算出内存使用率是23%
注解:查看缓存命中率是可以作为调整key_buffer_size参数的参考,但是这个命中率也有局限性,就是没有考虑到时间的问题。所以还可以通过计算每秒未命中的次数作为设置key_buffer_size的参考。
计算公式:key_read/uptime
Uptime就是mysql运行的时间,例如:
mysql> show status like 'uptime'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime | 2219 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show status like 'key_read%';
+-------------------+----------+
| Variable_name | Value |
+-------------------+----------+
| Key_read_requests | 10471296 |
| Key_reads | 44438 |
+-------------------+----------+
2 rows in set (0.00 sec)
从上面的信息可以计算出每秒未命中的次数是20次/秒。
2、 query_cache(查询缓存)
Mysql的查询缓存保留了查询的表和查询返回客户端的完整结果。当缓存命中的时候,服务器马上返回保存的结果,跳过解析、优化和执行的步骤。如果表发生了改变,那么缓存就失效了。
查询缓存的参数:
mysql> show variables like '%query_cache%';
+------------------------------+----------+
| Variable_name | Value |
+------------------------------+----------+
| have_query_cache | YES |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 16777216 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+----------+
5 rows in set (0.00 sec)
have_query_cache 当前的版本是否支持查询缓存
query_cache_limit 可缓存具体查询结果的最大值(sql_no_cache)
query_cache_min_res_unit 缓存块的最小单位
query_cache_size 查询缓存大小(须是1024的倍数)
query_cache_type 允许缓存(0或OFF将阻止缓存或查询缓存结果)
query_cache_wlock_invalidate 可以让你从其他联接已经锁定了的表中读取缓存 过的数据
查询缓存的使用状态:
mysql> show global status like 'qcache%';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| Qcache_free_blocks | 1249 |
| Qcache_free_memory | 3269080 |
| Qcache_hits | 110198 |
| Qcache_inserts | 115990 |
| Qcache_lowmem_prunes | 81077 |
| Qcache_not_cached | 7521 |
| Qcache_queries_in_cache | 3783 |
| Qcache_total_blocks | 10877 |
+-------------------------+---------+
8 rows in set (0.00 sec)
Qcache_free_blocks 缓存中相邻内存块的个数。数目大说明可能有碎片。FLUSH QUERY CACHE会对缓存中碎片的进行整理,从而得到一个空闲块。
Qcache_free_memory 缓存中的空闲内存。
Qcache_hits 每次查询在缓存中命中时就增大
Qcache_inserts 每次插入一个查询时就增大
Qcache_lowmem_prunes 缓存出现内存不足并且必须要进行清理以便为更多查询提供空 间的次数。这个数字最好长时间来看;如果这个数字在不断增长, 就表示可能碎片非常严重,或者内存很少。(上面的 free_blocks 和free_memory可以告诉您属于哪种情况)
Qcache_not_cached 不适合进行缓存的查询的数量,通常是由于这些查询不是 SELECT 语句。例如now()之类的函数。
Qcache_queries_in_cache 当前缓存的查询(和响应)的数量。
Qcache_total_blocks 缓存中块的数量
查询缓存命中率计算公式:Qcache_hits/(Qcache_hits + com_select),其中com_select可以通过show global status like 'com_select'查到。
查询缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
查询缓存利用率 = (query_cache_size - Qcache_free_memory) / query_cache_size * 100%
3、 table_cache
table_cache参数是设置表高速缓存的数目,好处就是可以快速的访问表中的内容。每一个连接进来,至少需要打开一个表的缓存,因此这个参数大小和max_connections设置有关。具体的关系是:tables_cache=max_connections*N ,其中N是应用可以执行的查询的一个连接中表的最大数量。当然这个是极端的情况,一般不需要设置那么高,可以根据查看opened_tables这个参数来考虑是否调整table_cache的值。例如:
mysql> show global status like 'open%tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables | 256 |
| Opened_tables | 46824 |
+---------------+-------+
2 rows in set (0.00 sec)
Open_tables表示表示打开表的数量,Opened_tables表示打开过表的数量。如果Opend_tables数值很大且在不停的增加,则说明table_cache的值设置了太小。从上面的例子中,可以看出table_cache值设置的太小了,可以考虑设置的大点。(可以用flush tables来清空缓存)
4、 thread_cache_size
thread_cache_size是设置能在缓存中保留线程的数量。作用是将空闲的连接线程放在连接池中,而不是立即销毁.这样的好处就是,当又有一个新的请求的时候,mysql不会立即去创建连接线程,而是先去Thread_Cache中去查找空闲的连接线程,如果存在则直接使用,不存在才创建新的连接线程.。
mysql> show global status like 'thread%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 5 |
| Threads_connected | 14 |
| Threads_created | 85 |
| Threads_running | 1 |
+-------------------+-------+
4 rows in set (0.00 sec)
Threads_created 曾经打开过的最大线程数
Threads_connected 当前打开的连接数
Threads_running 当前运行的
thread_cache_size设置主要查看Threads_created这个值的变化,如果Threads_created参数值很大,而且在不停的增加则表明服务器在一直创建线程,可以考虑调整thread_cache_size的大小。
5、 mysql的慢查询
通过设置参数slow_launch_time的大小来记录有多少慢查询记录。
mysql> show variables like '%slow%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| log_slow_queries | OFF |
| slow_launch_time | 2 |
+------------------+-------+
2 rows in set (0.00 sec)
log_slow_queries 是否开启日志
slow_launch_time 慢创建线程的时间
mysql> show variables like 'long_query_time';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 10 |
+-----------------+-------+
1 row in set (0.00 sec)
long_query_time 慢查询时间
mysql> show global status like '%slow%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| Slow_launch_threads | 0 |
| Slow_queries | 5 |
+---------------------+-------+
2 rows in set (0.00 sec)
Slow_launch_threads 创建时间超过slow_launch_time秒的线程数
Slow_queries 查询时间超过long_query_time秒的查询的个数
注:本站部分信息可能源于互联网分享,如有侵权,请告知,我们将及时删除!
- 用户评论
- 相关文章
-
最新评论
-
1
使用IIS+Resin来配置J...
本文介绍使用IIS+Resin来配置JSP的运行环境... -
2
MYSQL的主要参数设置(...
MYSQL的主要参数设置(优化) -
3
Linux服务器安全小技巧...
Linux 服务器安全小技巧 -
4
批量修改计算机名
批量修改计算机名 -
5
Linux下安装apache
Linux下安装apache -
6
Windows日志NTFS错误
Windows日志NTFS错误