my.cnf

1, 查看MySQL服务器配置信息
    mysql> show variables;
2, 查看MySQL服务器运行的各种状态值
    mysql> show global status;
3, 连接数
    mysql> show variables like 'max_connections';
     show processlist;
4, 慢查询查看
    mysql> show variables like '%slow%'; 
5,open table 的情况
    mysql> show global status like 'open%tables%';
6, 进程使用情况 
    mysql> show global status like 'Thread%';
7, 查询缓存(query cache)
    mysql> show global status like 'qcache%';
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:缓存中块的数量。
我们再查询一下服务器关于query_cache的配置:
  mysql> show variables like 'query_cache%'; 
+------------------------------+----------+
 | Variable_name | Value | 
+------------------------------+----------+
 | query_cache_limit | 33554432 |
 | query_cache_min_res_unit | 4096 |
 | query_cache_size | 33554432 |
 | query_cache_type | ON |
 | query_cache_wlock_invalidate | OFF |
 +------------------------------+----------+
各字段的解释:
query_cache_limit:超过此大小的查询将不缓存
query_cache_min_res_unit:缓存块的最小大小
query_cache_size:查询缓存大小
query_cache_type:缓存类型,决定缓存什么样的查询,示例中表示不缓存 select sql_no_cache 查询
query_cache_wlock_invalidate:当有其他客户端正在对MyISAM表进行写操作时,如果查询在query cache中,是否返回cache结果还是等写操作完成再读表获取结果。
query_cache_min_res_unit的配置是一柄”双刃剑”,默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费。
查询缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。
查询缓存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;查询缓存利用率在80%以上而且Qcache_lowmem_prunes > 50的话说明query_cache_size可能有点小,要不就是碎片太多。
查询缓存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%
示例服务器 查询缓存碎片率 = 20.46%,查询缓存利用率 = 62.26%,查询缓存命中率 = 1.94%,命中率很差,可能写操作比较频繁吧,而且可能有些碎片。
8.表锁情况 
       mysql> show global status like 'table_locks%';
          Table_locks_immediate 表示立即释放表锁数,
          Table_locks_waited表示需要等待的表锁数,
          如果 Table_locks_immediate / Table_locks_waited > 5000,最好采用InnoDB引擎,因为InnoDB是行锁而MyISAM是表锁,对于高并发写入的应用InnoDB效果会好些. 

9. 表扫描情况 索引的使用情况
       mysql> show global status like 'handler_read%'; 
   调出服务器完成的查询请求次数:
       mysql> show global status like 'com_select';
    说明:
          Handler_read_first 代表读取索引头的次数,如果这个值很高,说明全索引扫描很多。
          Handler_read_key代表一个索引被使用的次数,如果我们新增加一个索引,可以查看Handler_read_key是否有增加,如果有增加,说明sql用到索引。
          Handler_read_next 代表读取索引的下列,一般发生range scan。
          Handler_read_prev 代表读取索引的上列,一般发生在ORDER BY … DESC。
          Handler_read_rnd 代表在固定位置读取行,如果这个值很高,说明对大量结果集进行了排序、进行了全表扫描、关联查询没有用到合适的KEY。
          Handler_read_rnd_next 代表进行了很多表扫描,查询性能低下。
          表扫描率 = Handler_read_rnd_next / Com_select
          如果表扫描率超过4000,说明进行了太多表扫描,很有可能索引没有建好,增加read_buffer_size值会有一些好处,但最好不要超过8MB。
http://www.educity.cn/wenda/403888.html

设置参数
1.max_connections  连接数
允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 too many connections 错误。 默认     数值是100,我把它改为1024
          查看方法:SELECT @@MAX_CONNECTIONS AS 'Max Connections';
                           show variables like 'max_connections';
          设置方法:1.改my.cnf
                               max_connections = 1024   
                           2.set GLOBAL max_connections=1000;
          查看当前连接数show status like '%conn%';
          Threads_connected  当前的连接数
           Connections  试图连接到(不管是否成功)MySQL服务器的连接数。
            show global status like 'Max_used_connections';  服务器启动后已经同时使用的连接的最大数量。
          最大连接错误次数,可适当加大,防止频繁连接错误后,前端host被mysql拒绝掉
          max_connect_errors = 2014
2.record_buffer
每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072(128k)
record_buffer=1M
           查看方法: show variables like 'record_buffer';

3.key_buffer_size
索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8m),我的mysql主机有2gb内存,一般设置50M够了。是对MyISAM表性能影响最大的一个参数
查看方法:show variables like 'key_buffer_size';
设置方法:1.my.cnf     
                    key_buffer_size = 50M
                 2.set global key_buffer_size=102428800;  这是设置为100M
下面为一台以MyISAM为主要存储引擎服务器的配置:
mysql> show variables like 'key_buffer_size';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| key_buffer_size | 72454144 |
+-----------------+----------+
1 row in set (0.25 sec)
分配了约70MB内存给mysql key_buffer_size,我们再看一下key_buffer_size的使用情况:

mysql> show global status like 'key_read%';  查看使用情况
+-------------------+----------+
| Variable_name     | Value    |
+-------------------+----------+
| Key_read_requests | 39393115 |
| Key_reads         | 174565   |
+-------------------+----------+
2 rows in set (0.23 sec)
上面有2个结果值,这里解释一下它们各代表什么意思:
Key_read_requests:表示从缓存读取索引的请求次数
Key_reads:从磁盘读取索引的请求次数
知道了这2个参数各代表什么意思了,我们可以看到:一共有39393115个请求从缓存读取索引,174565个请求从磁盘读取索引。
让我们来计算一下索引未命中缓存的概率:
key_cache_miss_rate = Key_reads / Key_read_requests * 100%
通过上面的公式我们计算上面数据索引为命中缓存的概率值为:0.4431%,约250个索引读取请求就有一个直接读硬盘,这个值好像不是很理想。key_cache_miss_rate在0.1%以下都很好(每1000个请求有一个直接读硬盘),所以理论来上来说,这个比值越小越好,但过小的话,难免造成内存浪费。
mysql> show global status like 'key_blocks_u%';
  +------------------------+-------------+
  | Variable_name | Value |
  +------------------------+-------------+
  | Key_blocks_unused | 0 |
  | Key_blocks_used | 413543 |
  +------------------------+-------------+
Key_blocks_unused表示未使用的缓存簇(blocks)数,Key_blocks_used表示曾经用到的最大的blocks数,比如这台服务器,所有的缓存都用到了,要么增加key_buffer_size,要么就是过渡索引了,把缓存占满了。比较理想的设置:
Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80%

4.table_open_cache
指示表高速缓存的大小。当Mysql访问一个表时,如果在Mysql表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区,这样做的好处是可以更快速地访问表中的内容。一般来说,可以通过查看数据库运行峰值时间的状态值Open_tables和Opened_tables,用以判断是否需要增加table_cache的值,即如果open_tables接近table_cache的时候,并且Opened_tables这个值在逐步增加,那就要考虑增加这个值的大小了
在mysql默认安装情况下,table_cache的值在2G内存以下的机器中的值默认时256512,如果机器有4G内存,则默认这个值是2048,但这决意味着机器内存越大,这个值应该越大,因为table_cache加大后,使得mysql对SQL响应的速度更快了,不可避免的会产生更多的死锁(dead lock),这样反而使得数据库整个一套操作慢了下来,严重影响性能。所以平时维护中还是要根据库的实际情况去作出判断,找到最适合你维护的库的table_cache值
Open_tables表示打开表的数量,Opened_tables表示打开过的表数量,如果Opened_tables数量过大,说明配置中table_cache(5.1.3之后这个值叫做table_open_cache)值可能太小
 查看打开表的方式:1.show global status like 'open%tables%';
mysql> show global status like 'open%tables%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables   | 2999  |
| Opened_tables | 37386 |
+---------------+-------+
2.phpmyadmin
比较好的值是
Open_tables / Opened_tables * 100% >= 85%
Open_tables / table_cache * 100% <= 95%
执行flush tables后,open_tables会清0,opened_tables则不会。因为flush_tables后,mysql会关闭打开的缓存表。
设置方法: 1.my.cnf
                     table_open_cache = 5120;
                 2.set GLOBAL table_open_cache = 5120;
          查看方法:show variables like 'table_open_cache';
5.back_log
MySQL能暂存的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用。如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log就会断开
编辑my.cnf
back_log=600
6.interactive_timeout
服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 client_interactive 选项的客户。 默认数值是28800
7.thread_cache_size  进程使用情况
服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的
thread_cache_size = 300
查看状态SHOW STATUS LIKE  'threads%';
set GLOBAL  thread_cache_size= 150;
show variables like 'thread_cache_size';
服务器线程缓存thread_cache_size没有进行设置,或者设置过小,这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。(-->表示要调整的值)   根据物理内存设置规则如下:
     1G  ---> 8
     2G  ---> 16
     3G  ---> 32
    >3G  ---> 64


设置了thread_cache_size,当客户端断开之后,服务器处理此客户的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)。Threads_created表示创建过的线程数,如果发现Threads_created值过大的话,表明 MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值
  mysql> show global status like 'Thread%';
  +-------------------+-------+
  | Variable_name | Value |
  +-------------------+-------+
  | Threads_cached | 46 |
  | Threads_connected | 2 |
  | Threads_created | 570 |
  | Threads_running | 1 |
  +-------------------+-------+
  如果我们在MySQL服务器配置文件中设置了thread_cache_size,当客户端断开之后,服务器处理此客户的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)。Threads_created表示创建过的线程数,如果发现Threads_created值过大的话,表明 MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值,查询服务器 thread_cache_size配置:
   mysql> show variables like 'thread_cache_size';
  +-------------------+-------+
  | Variable_name | Value |
  +-------------------+-------+
  | thread_cache_size | 64 |
  +-------------------+-------+
  示例中的服务器还是挺健康的。

8.wait_timeout
服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是288008小时)(mysql的一个connection空闲时间超过8小时,mysql会自动断开该连接)


9.innodb_thread_concurrency
这个是innodb内核的并发线程处理参数,前端有100个连接,发来1000个sql,如果这个参数被设置成2。那么这1000个sql中,最多只有2个sql在innodb内核运行。其它都得等。(事实上,处理过程很复杂,可以先这么理解,不是所有sql都需要放在Innodb内核处理的)
你的服务器CPU有几个就设置为几,建议用默认一般为8

10.tmp_table_size  临时表
它规定了内部内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下,默认:
mysql> show variables like "tmpdir";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| tmpdir        | /tmp/ |
+---------------+-------+
优化查询语句的时候,要避免使用临时表,如果实在避免不了的话,要保证这些临时表是存在内存中的。如果需要的话并且你有很多group by语句,并且你有很多内存,增大tmp_table_size(和max_heap_table_size)的值。这个变量不适用与用户创建的内存表(memory table).
查看临时表状况
show global status like 'created_tmp%'; 
| Variable_name                  | Value   | 
| Created_tmp_disk_tables   | 21197   |   #在磁盘上创建临时表的次数
| Created_tmp_files             | 58      |       #在磁盘上创建临时文件的次数
| Created_tmp_tables          | 1771587 |  #使用临时表的总次数
比较理想的配置是:  Created_tmp_disk_tables / Created_tmp_tables * 100% <= 25%  否则建议要增加临时表大小
tmp_table_size = 512M
mysql> show variables where Variable_name in ('tmp_table_size', 'max_heap_table_size');
+---------------------+----------+
| Variable_name       | Value    |
+---------------------+----------+
| max_heap_table_size | 16777216 |
| tmp_table_size      | 52428800 |
+---------------------+----------+
可以看到缓存空间有512M但是可以缓存的最大表只能是16M,如果表大于16M只能写硬盘

10.binlog_cache_size
为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存。默认值:32768   -- 即 32K (建议20971522M)
Binlog_cache_disk_use表示因为我们binlog_cache_size设计的内存不足导致缓存二进制日志用到了临时文件的次数
Binlog_cache_use  表示 用binlog_cache_size缓存的次数
当对应的Binlog_cache_disk_use 值比较大的时候 我们可以考虑适当的调高 binlog_cache_size 对应的值

back_log 超过最大连接后列队数量
interactive_timeout  服务器在关闭它前在一个交互连接上等待行动的秒数 
key_buffer_size     用于索引块的缓冲区大小 (只对MyISAM起作用)
query_cache_size     查询结果缓存区大小 
record_buffer_size   
read_rnd_buffer_size   随机读取缓存区大小可以设置为16M
sort_buffer_size     每个要进行排序的进程分配一个缓冲区可设置为16M
join_buffer_size
table_cache
max_heap_table_size
tmp_table_size
thread_cache_size
thread_concurrency
wait_timeout
innodb_buffer_pool_size   缓存innodb索引的内存大小1G

客户端断开连接
例如密码错误
show status like 'Aborted%';


11.innodb_buffer_pool_size
 一个Innodb最重要的参数,这个参数和MyISAM的key_buffer_size有相似之处,但也是有差别的。这个参数主要缓存innodb表的索引,数据,插入数据时的缓冲,设置得越大,存取表里面数据时所需要的磁盘I/O越少,一般是内存的一半,不超过2G,否则系统会崩溃。为Innodb加速优化首要参数。该参数分配内存的原则:这个参数默认分配只有8M,可以说是非常小的一个值。如果是一个专用DB服务器,那么他可以占到内存的70%-80%。这个参数不能动态更改,所以分配需多考虑。分配过大,会使Swap占用过多,致使Mysql的查询特慢。如果你的数据比较小,那么可分配是你的数据大小+10%左右做为这个参数的值
show variables like 'innodb_buffer_pool_size';
只能通过my.cnf配置 innodb_buffer_pool_size = 2048M(2G)
#InnoDB用于缓存数据、索引、锁、插入缓冲、数据字典等
#如果是专用的DB服务器,且以InnoDB引擎为主的场景,通常可设置物理内存的50%
#如果是非专用DB服务器,可以先尝试设置成内存的1/4,如果有问题再调整
#默认值是8M,非常坑X,这也是导致很多人觉得InnoDB不如MyISAM好用的缘故

12.innodb_additional_mem_pool_size
用来存放Innodb的内部目录(数据字典、内部内部数据结果)缓存池这个值不用分配太大,系统可以自动调。不用设置太高。通常比较大数据设置16M够用了,如果表比较多,可以适当的增大。如果这个值自动增加,会在error log有中显示的

13.innodb_log_file_size
在日志组中每个日志文件的大小,一般是innodb_buffer_pool_size的25%,官方推荐是innodb_buffer_pool_size的40-50%。一般控制在几个LOG文件相加大小在2G以内为佳。具体情况还需要看你的事务大小,数据大小为依据。说明:这个值分配的大小和数据库的写入速度,事务大小,异常重启后的恢复有很大的关系,可以设置为64M到512M
查看大小  show variables like 'innodb_log_file_size';
               select @@innodb_log_file_size;
一般为2个日志组select @@innodb_log_files_in_group;
innodb_log_file_size = 256M

14.innodb_data_file_path
InnoDB共享表空间初始化大小,默认是 10MB,也非常坑X,改成 1GB,并且自动扩展
innodb_data_file_path = ibdata1:1G:autoextend

15.innodb_status_file
启用InnoDB的status file,便于管理员查看以及监控等
innodb_status_file = 1

16.
#设置连接超时阀值,如果前端程序采用短连接,建议缩短这2个值
#如果前端程序采用长连接,可直接注释掉这两个选项,是用默认配置(8小时)
interactive_timeout = 120
wait_timeout = 120

17.query-cache查询缓存
 mysql> show global status like 'qcache%';
  +-------------------------+-----------+
  | Variable_name | Value |
  +-------------------------+-----------+
  | Qcache_free_blocks | 22756 |
  | Qcache_free_memory | 76764704 |
  | Qcache_hits | 213028692 |
  | Qcache_inserts | 208894227 |
  | Qcache_lowmem_prunes | 4010916 |
  | Qcache_not_cached | 13385031 |
  | Qcache_queries_in_cache | 43560 |
  | Qcache_total_blocks | 111212 |
+-------------------------+-----------+
  MySQL查询缓存变量解释:
  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:缓存中块的数量。
  我们再查询一下服务器关于query_cache的配置:
   mysql> show variables like 'query_cache%';
  +------------------------------+-----------+
  | Variable_name | Value |
  +------------------------------+-----------+
  | query_cache_limit | 2097152 |
  | query_cache_min_res_unit | 4096 |
  | query_cache_size | 203423744 |
  | query_cache_type | ON |
  | query_cache_wlock_invalidate | OFF |
  +------------------------------+-----------+
  各字段的解释:
  query_cache_limit:超过此大小的查询将不缓存
  query_cache_min_res_unit:缓存块的最小大小
query_cache_size:查询缓存大小
  query_cache_type:缓存类型,决定缓存什么样的查询,示例中表示不缓存 select sql_no_cache 查询
  query_cache_wlock_invalidate:当有其他客户端正在对MyISAM表进行写操作时,如果查询在query cache中,是否返回cache结果还是等写操作完成再读表获取结果。
  query_cache_min_res_unit的配置是一柄”双刃剑”,默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费。
  查询缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
  如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。
  查询缓存利用率 = (query_cache_size - Qcache_free_memory) / query_cache_size * 100%
  查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;查询缓存利用率在80%以上而且Qcache_lowmem_prunes > 50的话说明query_cache_size可能有点小,要不就是碎片太多。
  查询缓存命中率 = (Qcache_hits - Qcache_inserts) / Qcache_hits * 100%
  示例服务器 查询缓存碎片率 = 20.46%,查询缓存利用率 = 62.26%,查询缓存命中率 = 1.94%,命中率很差,可能写操作比较频繁吧,而且可能有些碎片。

18.open_file文件打开数(open_files)
   mysql> show global status like 'open_files';
  +---------------+-------+
  | Variable_name | Value |
  +---------------+-------+
  | Open_files | 1410 |
  +---------------+-------+
  mysql> show variables like 'open_files_limit';
  +------------------+-------+
  | Variable_name | Value |
  +------------------+-------+
  | open_files_limit | 4590 |
  +------------------+-------+
  比较合适的设置:Open_files / open_files_limit * 100% <= 75%
19.表锁情况
mysql> show global status like 'table_locks%';
  +-----------------------+-----------+
  | Variable_name | Value |
  +-----------------------+-----------+
  | Table_locks_immediate | 490206328 |
  | Table_locks_waited | 2084912 |
  +-----------------------+-----------+
  Table_locks_immediate表示立即释放表锁数,Table_locks_waited表示需要等待的表锁数,如果 Table_locks_immediate / Table_locks_waited > 5000,最好采用InnoDB引擎,因为InnoDB是行锁而MyISAM是表锁,对于高并发写入的应用InnoDB效果会好些。示例中的服务器 Table_locks_immediate / Table_locks_waited = 235,MyISAM就足够了。 
20.表扫描情况
   mysql> show global status like 'handler_read%';
  +-----------------------+-------------+
  | Variable_name | Value |
  +-----------------------+-------------+
  | Handler_read_first | 5803750 |
  | Handler_read_key | 6049319850 |
  | Handler_read_next | 94440908210 |
  | Handler_read_prev | 34822001724 |
  | Handler_read_rnd | 405482605 |
  | Handler_read_rnd_next | 18912877839 |
  +-----------------------+-------------+
  各字段解释参见http://hi.baidu.com/thinkinginlamp/blog/item/31690cd7c4bc5cdaa144df9c.html,调出服务器完成的查询请求次数:
   mysql> show global status like 'com_select';
  +---------------+-----------+
  | Variable_name | Value |
  +---------------+-----------+
  | Com_select | 222693559 |
  +---------------+-----------+
  计算表扫描率:
  表扫描率 = Handler_read_rnd_next / Com_select
  如果表扫描率超过4000,说明进行了太多表扫描,很有可能索引没有建好,增加read_buffer_size值会有一些好处,但最好不要超过8MB。



#跳过冲突
slave-skip-errors = 1062

#设置自增id为奇数
auto_increment_offset = 1
auto_increment_increment = 2

#MySQL允许最大的进程连接数,如果经常出现Too Many Connections的错误提示,则需要增大此值。
max_connections = 3000

#设置每个主机的连接请求异常中断的最大次数,当超过该次数,MYSQL服务器将禁止host的连接请求,直到mysql服务器重启或通过flush hosts命令清空此host的相关信息。
max_connect_errors = 1000

#指示表调整缓冲区大小
#table_cache 参数设置表高速缓存的数目。每个连接进来,都会至少打开一个表缓存

#设置在网络传输中一次消息传输量的最大值。系统默认值 为1MB,最大值是1GB,必须设置1024的倍数
max_allowed_packet = 32M

#服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的
#线程,增加这个值可以改善系统性能.(1G内存增加8, 128=16*8)
thread_cache_size = 80

#设置CPU核数
thread_concurrency = 8

#用于索引的缓冲区大小,增加它可以得到更好的索引处理性能,主要针对MyISAM
key_buffer_size = 512M

#MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区>
#大小提高其性能。和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。
read_buffer_size = 1M

#批量插入数据缓存大小,可以有效提高插入效率,默认为8M
bulk_insert_buffer_size = 64M

# MyISAM表发生变化时重新排序所需的缓冲
myisam_sort_buffer_size = 32M

# 这对Innodb表来说非常重要。Innodb相比MyISAM表对缓冲更为敏感。MyISAM可以在默认的 key_buffer_size 设置下运行的可以,然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟蜗牛似的。由于Innodb把数据和索引都缓存起来,无需留给操作系统太多的内
#存,因此如果只需要用Innodb的话则可以设置它高达 70-80% 的可用内存。一些应用于 key_buffer 的规则有 — 如果你的数据量不大,并且不会暴增,那么无需把 innodb_buffer_pool_size 设置的太大了
innodb_buffer_pool_size = 2048M

#默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量
innodb_thread_concurrency = 0

# 如果将此参数设置为1,将在每次提交事务后将日志写入磁盘。为提供性能,可以设置为0或2,但要承担在发生故障时丢失数据的风险。设置为0表示事务日志写入日志文件,而日志文件每秒刷新到磁盘一次。设置为2表示事务日志将在提交时写入日志,但日志文件每>
#次刷新到磁盘一次。
innodb_flush_log_at_trx_commit = 2

#此参数确定些日志文件所用的内存大小,以M为单位。
innodb_log_buffer_size = 16M

# innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是4
innodb_write_io_threads = 4
innodb_read_io_threads = 4

#InnoDB 有其内置的死锁检测机制,能导致未完成的事务回滚。但是,如果结合InnoDB使用MyISAM的lock tables 语句或第三方事务引擎,则InnoDB无法识别死锁。为消除这种可能性,可以将innodb_lock_wait_timeout设置为一个整数值,指示 MySQL在允许其他事务修>
#改那些最终受事务回滚的数据之前要等待多长时间(秒数)
innodb_lock_wait_timeout = 3

#MySQL能暂存的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用。如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_lo
#g,将不被授予连接资源。
back_log=600

#缓存打开的表个数
table_open_cache = 3000

#它规定了内部内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下
tmp_table_size = 50M

#查询结果缓存
query_cache_size = 16M

#随机读取缓存区大小
read_rnd_buffer_size = 16M

#删除bin_log日志天数
expire_logs_days = 15

#服务器在关闭它前在一个交互连接上等待行动的秒数
interactive_timeout = 1800

open_files_limit = 65535

#线程超时时间
#wait_timeout = 1800

#表的高速缓存大小
table_open_cache = 256

 #用来存放Innodb的内部目录
innodb_additional_mem_pool_size = 16M

#在日志组中每个日志文件的大小 一般为innodb_buffer_pool_size的25%
innodb_log_file_size = 512M

网友针对24G内存配置

max_connections = 1024
max_connect_errors = 10000
max_allowed_packet = 16M

skip-name-resolve
lower_case_table_names = 1

thread_cache = 128
table_open_cache = 1024

query_cache_type = 1
query_cache_size = 128M

join_buffer_size = 8M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M

max_heap_table_size = 128M
tmp_table_size = 128M
tmpdir = /dev/shm

binlog_cache_size = 12M
max_binlog_size = 512M
expire_logs_days = 3

innodb_buffer_pool_size = 16G
innodb_use_sys_malloc = 1

# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 128M
innodb_log_buffer_size = 32M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_lock_wait_timeout = 50
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值