Amoeba for MySQL

2014年2月4日 | 标签:
 

来源:http://docs.hexnova.com/amoeba/php

Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路由功能,专一 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具备负载均衡、高可用性、Query过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。 在Amoeba上面你可以完成多数据源的高可用、负载均衡、数据切片的功能。目前在不少企业的生产线上面使用。html

那么Amoeba for mysql 对客户端程序来讲是什么呢? 咱们就当它是mysql吧,它是一个虚拟的mysql,对外提供mysql协议。客户端链接amoeba就象链接mysql同样。在amoeba内部须要配置相关的认证属性。具体请参阅后面的章节。前端

Amoeba for Mysql 与MySQL Proxy比较

在MySQL proxy 6.0版本 上面若是想要读写分离而且 读集群、写集群 机器比较多状况下,用mysql proxy 须要至关大的工做量,目前mysql proxy没有现成的 lua脚本。mysql proxy根本没有配置文件, lua脚本就是它的所有,固然lua是至关方便的。那么一样这种东西须要编写大量的脚本才能完成一 个复杂的配置。而Amoeba for Mysql只须要进行相关的配置就能够知足需求。mysql

Amoeba不能作什么?

  • 目前还不支持事务
  • 暂时不支持存储过程(近期会支持)
  • 不适合从amoeba导数据的场景或者对大数据量查询的query并不合适(好比一次请求返回10w以上甚至更多数据的场合)
  • 暂时不支持分库分表,amoeba目前只作到分数据库实例,每一个被切分的节点须要保持库表结构一致

 

 
2014年1月7日 | 标签:
 

一、MySQL的复制原理以及流程ios

(1)、先问基本原理流程,3个线程以及之间的关联;面试

(2)、再问一致性延时性,数据恢复;sql

(3)、再问各类工做遇到的复制bug的解决方法。数据库

 

二、MySQL中myisam与innodb的区别,至少5点缓存

(1)、问5点不一样;安全

(2)、问各类不一样mysql版本的2者的改进;

(3)、2者的索引的实现方式。

 

三、问MySQL中varchar与char的区别以及varchar(50)中的30表明的涵义

(1)、varchar与char的区别;

(2)、varchar(50)中50的涵义;

(3)、int(20)中20的涵义;

(4)、为何MySQL这样设计。

[备注] 本人也面试了近12个2年MySQL DBA经验的朋友,没有一个能回答出第(2)、(3)题

 

四、问了innodb的事务与日志的实现方式

(1)、有多少种日志;

(2)、日志的存放形式;

(3)、事务是如何经过日志来实现的,说得越深刻越好。

 

五、问了MySQL binlog的几种日志录入格式以及区别

(1)、各类日志格式的涵义;

(2)、适用场景;

(3)、结合第一个问题,每一种日志格式在复制中的优劣。

 

六、问了下MySQL数据库cpu飙升到500%的话他怎么处理?

(1)、没有经验的,能够不问;

(2)、有经验的,问他们的处理思路。

 

七、sql优化

(1)、explain出来的各类item的意义;

(2)、profile的意义以及使用场景;

(3)、explain中的索引问题。

 

八、备份计划,mysqldump以及xtranbackup的实现原理

(1)、备份计划;

(2)、备份恢复时间;

(3)、备份恢复失败如何处理。

 

九、500台db,在最快时间以内重启

 

十、在当前的工做中,你碰到到的最大的MySQL DB问题是?

 

十一、innodb的读写参数优化

(1)、读取参数,global buffer pool以及 local buffer;

(2)、写入参数;

(3)、与IO相关的参数;

(4)、缓存参数以及缓存的适用场景。

 

十二、请简洁地描述下MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?

 

1三、表中有大字段X(例如:text类型),且字段X不会常常更新,以读为为主,请问

(1)、您是选择拆成子表,仍是继续放一块儿;

(2)、写出您这样选择的理由。

 

1四、MySQL中InnoDB引擎的行锁是经过加在什么上完成(或称实现)的?为何是这样子的?

 

 
2014年1月5日 | 标签:
 

网上有很多mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,一样的设置,在不一样的环境下 ,因为内存,访问量,读写频率,数据差别等等状况,可能会出现不一样的结果,所以简单地根据某个给出方案来配置mysql是行不通的,最好能使用status信息对mysql进行具体的优化,网上找了一篇文章,分页分得乱七八糟的,只能转到博客。

mysql> show global status;

能够列出MySQL服务器运行各类状态值,另外,查询MySQL服务器配置信息语句:

mysql> show variables;

1、慢查询

mysql> show variables like ‘%slow%‘;
+------------------+-------+
| Variable_name     | Value |
+------------------+-------+
| log_slow_queries | ON     |
| slow_launch_time | 2      |
+------------------+-------+

mysql> show global status like ‘%slow%‘;
+———————+——-+
| Variable_name        | Value |
+———————+——-+
| Slow_launch_threads | 0      |
| Slow_queries         | 4148 |
+———————+——-+

配置中打开了记录慢查询,执行时间超过2秒的即为慢查询,系统显示有4148个慢查询,你能够分析慢查询日志,找出有问题的SQL语句,慢查询时间不宜设置过长,不然意义不大,最好在5秒之内,若是你须要微秒级别的慢查询,能够考虑给MySQL打补丁:http://www.percona.com/docs/wiki/release:start,记得找对应的版本。

打开慢查询日志可能会对系统性能有一点点影响,若是你的MySQL是主-从结构,能够考虑打开其中一台从服务器的慢查询日志,这样既能够监控慢查询,对系统性能影响又小。

2、链接数

常常会碰见”MySQL: ERROR 1040: Too many connections”的状况,一种是访问量确实很高,MySQL服务器抗不住,这个时候就要考虑增长从服务器分散读压力,另一种状况是MySQL配置文件中max_connections值太小:

mysql> show variables like ‘max_connections‘;
+—————–+——-+
| Variable_name    | Value |
+—————–+——-+
| max_connections | 256   |
+—————–+——-+

这台MySQL服务器最大链接数是256,而后查询一下服务器响应的最大链接数:

mysql> show global status like ‘Max_used_connections‘;

MySQL服务器过去的最大链接数是245,没有达到服务器链接数上限256,应该没有出现1040错误,比较理想的设置是

Max_used_connections / max_connections * 100% ≈ 85%

最大链接数占上限链接数的85%左右,若是发现比例在10%如下,MySQL服务器链接数上限设置的太高了。

3、Key_buffer_size

key_buffer_size是对MyISAM表性能影响最大的一个参数,下面一台以MyISAM为主要存储引擎服务器的配置:

mysql> show variables like ‘key_buffer_size‘;+—————–+————+
| Variable_name    | Value       |
+—————–+————+
| key_buffer_size | 536870912 |
+—————–+————+

分配了512MB内存给key_buffer_size,咱们再看一下key_buffer_size的使用状况:

mysql> show global status like ‘key_read%‘;
+————————+————-+
| Variable_name           | Value        |
+————————+————-+
| Key_read_requests       | 27813678764 |
| Key_reads               | 6798830      |
+————————+————-+

一共有27813678764个索引读取请求,有6798830个请求在内存中没有找到直接从硬盘读取索引,计算索引未命中缓存的几率:

key_cache_miss_rate = Key_reads / Key_read_requests * 100%

好比上面的数据,key_cache_miss_rate为0.0244%,4000个索引读取请求才有一个直接读硬盘,已经很BT了,key_cache_miss_rate在0.1%如下都很好(每1000个请求有一个直接读硬盘),若是key_cache_miss_rate在0.01%如下的话,key_buffer_size分配的过多,能够适当减小。

MySQL服务器还提供了key_blocks_*参数:

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、临时表

mysql> show global status like ‘created_tmp%‘;
+————————-+———+
| Variable_name            | Value    |
+————————-+———+
| Created_tmp_disk_tables | 21197    |
| Created_tmp_files        | 58       |
| Created_tmp_tables       | 1771587 |
+————————-+———+

每次建立临时表,Created_tmp_tables增长,若是是在磁盘上建立临时表,Created_tmp_disk_tables也增长,Created_tmp_files表示MySQL服务建立的临时文件文件数,比较理想的配置是:

Created_tmp_disk_tables / Created_tmp_tables * 100% <= 25%好比上面的服务器Created_tmp_disk_tables / Created_tmp_tables * 100% = 1.20%,应该至关好了。咱们再看一下MySQL服务器对临时表的配置:

mysql> show variables where Variable_name in (‘tmp_table_size‘, ‘max_heap_table_size‘);
+———————+———–+
| Variable_name        | Value      |
+———————+———–+
| max_heap_table_size | 268435456 |
| tmp_table_size       | 536870912 |
+———————+———–+

只有256MB如下的临时表才能所有放内存,超过的就会用到硬盘临时表。

5、Open Table状况

mysql> show global status like ‘open%tables%‘;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Open_tables    | 919    |
| Opened_tables | 1951  |
+—————+——-+

Open_tables表示打开表的数量,Opened_tables表示打开过的表数量,若是Opened_tables数量过大,说明配置中table_cache(5.1.3以后这个值叫作table_open_cache)值可能过小,咱们查询一下服务器table_cache值:

mysql> show variables like ‘table_cache‘;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| table_cache    | 2048  |
+—————+——-+

比较合适的值为:

Open_tables / Opened_tables * 100% >= 85%

Open_tables / table_cache * 100% <= 95%

6、进程使用状况

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     |
+——————-+——-+

示例中的服务器仍是挺健康的。

7、查询缓存(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%,命中率不好,可能写操做比较频繁吧,并且可能有些碎片。

8、排序使用状况

mysql> show global status like ‘sort%‘;
+——————-+————+
| Variable_name      | Value       |
+——————-+————+
| Sort_merge_passes | 29          |
| Sort_range         | 37432840    |
| Sort_rows          | 9178691532 |
| Sort_scan          | 1860569     |
+——————-+————+

Sort_merge_passes 包括两步。MySQL 首先会尝试在内存中作排序,使用的内存大小由系统变量 Sort_buffer_size 决定,若是它的大小不够把全部的记录都读到内存中,MySQL 就会把每次在内存中排序的结果存到临时文件中,等 MySQL 找到全部记录以后,再把临时文件中的记录作一次排序。这再次排序就会增长 Sort_merge_passes。实际上,MySQL 会用另外一个临时文件来存再次排序的结果,因此一般会看到 Sort_merge_passes 增长的数值是建临时文件数的两倍。由于用到了临时文件,因此速度可能会比较慢,增长 Sort_buffer_size 会减小 Sort_merge_passes 和 建立临时文件的次数。但盲目的增长 Sort_buffer_size 并不必定能提升速度,见 How fast can you sort data with MySQL?(引自http://qroom.blogspot.com/2007/09/mysql-select-sort.html,貌似被墙)

另外,增长read_rnd_buffer_size(3.2.3是record_rnd_buffer_size)的值对排序的操做也有一点的好处,参见:http://www.mysqlperformanceblog.com/2007/07/24/what-exactly-is-read_rnd_buffer_size/

9、文件打开数(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%

10、表锁状况

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就足够了。

11、表扫描状况

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。

后记:

文中提到一些数字都是参考值,了解基本原理就能够,除了MySQL提供的各类status值外,操做系统的一些性能指标也很重要,好比经常使用的top,iostat等,尤为是iostat,如今的系统瓶颈通常都在磁盘IO上,关于iostat的使用,能够参考:http://www.php-oa.com/2009/02/03/iostat.html

 
2014年1月2日 | 标签:
 

[mysqld]
port = 3306
serverid = 1
socket = /tmp/mysql.sock
skip-name-resolve
#禁止MySQL对外部链接进行DNS解析,使用这一选项能够消除MySQL进行DNS解析的时间。但须要注意,若是开启该选项,则全部远程主机链接受权都要使用IP地址方式,不然MySQL将没法正常处理链接请求!注:若是用winform链接mysql,加入此句速度会有很大的提高

skip-locking
# 避免MySQL的外部锁定,减小出错概率加强稳定性。

back_log = 384
指定MySQL可能的链接数量。当MySQL主线程在很短的时间内接收到很是多的链接请求,该参数生效,主线程花费很短的时间检查链接而且启动一个新线程。 back_log参数的值指出在MySQL暂时中止响应新请求以前的短期内多少个请求能够被存在堆栈中。 若是系统在一个短期内有不少链接,则须要增大该参数的值,该参数值指定到来的TCP/IP链接的侦听队列的大小。不一样的操做系统在这个队列大小上有它本身的限制。 试图设定back_log高于你的操做系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。

key_buffer_size = 32M
# key_buffer_size这对MyISAM表来讲很是重要。若是只是使用MyISAM表,能够把它设置为可用内存的 30-40%。合理的值取决于索引大小、数据量以及负载 — 记住,MyISAM表会使用操做系统的缓存来缓存数据,所以须要留出部份内存给它们,不少状况下数据比索引大多了。尽管如此,须要老是检查是否全部的 key_buffer 都被利用了 — .MYI 文件只有 1GB,而 key_buffer 却设置为 4GB 的状况是很是少的。这么作太浪费了。若是你不多使用MyISAM表,那么也保留低于 16-32MB 的key_buffer_size 以适应给予磁盘的临时表索引所需。

innodb_buffer_pool_size = 2.4G
#这对Innodb表来讲很是重要。Innodb相比MyISAM表对缓冲更为敏感。MyISAM能够在默认的 key_buffer_size 设置下运行的能够,然而Innodb在默认的innodb_buffer_pool_size 设置下却跟蜗牛似的。因为Innodb把数据和索引都缓存起来,无需留给操做系统太多的内存,所以若是只须要用Innodb的话则能够设置它高达 70-80% 的可用内存。– 若是你的数据量不大,而且不会暴增,那么无需把innodb_buffer_pool_size 设置的太大了。

innodb_additional_pool_size = 20M
#这个选项对性能影响并不太多,至少在有差很少足够内存可分配的操做系统上是这样。不过若是你仍然想设置为 20MB(或者更大),所以就须要看一下Innodb其余须要分配的内存有多少。

innodb_log_file_size = 512M
#在高写入负载尤为是大数据集的状况下很重要。这个值越大则性能相对越高,可是要注意到可能会增长恢复时间。我常常设置为64-512MB,根据服务器大小而异。

innodb_log_buffer_size =16M
#默认的设置在中等强度写入负载以及较短事务的状况下,服务器性能还能够。若是存在更新操做峰值或者负载较大,就应该考虑加大它的值了。若是它的值设置过高了,可能会浪费内存 — 它每秒都会刷新一次,所以无需设置超过1秒所需的内存空间。一般8-16MB就足够了。越小的系统它的值越小。

innodb_flush_logs_at_trx_commit = 2
#是否为Innodb比MyISAM慢1000倍而头大?看来也许你忘了修改这个参数了。默认值是 1,这意味着每次提交的更新事务(或者每一个事务以外的语句)都会刷新到磁盘中,而这至关耗费资源,尤为是没有电池备用缓存时。不少应用程序,尤为是从 MyISAM转变过来的那些,把它的值设置为 2 就能够了,也就是不把日志刷新到磁盘上,而只刷新到操做系统的缓存上。日志仍然会每秒刷新到磁盘中去,所以一般不会丢失每秒1-2次更新的消耗。若是设置为0就快不少了,不过也相对不安全了 — MySQL服务器崩溃时就会丢失一些事务。设置为2指挥丢失刷新到操做系统缓存的那部分事务。

max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M
#查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每链接独占!若是有100个链接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。因此,对于内存在4GB左右的服务器推荐设置为6-8M。

read_buffer_size = 4M
#读查询操做所能使用的缓冲区大小。和sort_buffer_size同样,该参数对应的分配内存也是每链接独享!

join_buffer_size = 8M
#联合查询操做所能使用的缓冲区大小,和sort_buffer_size同样,该参数对应的分配内存也是每链接独享!

myisam_sort_buffer_size = 64M
table_cache = 512
#打开一个表的开销可能很大。例如MyISAM把MYI文件头标志该表正在使用中。你确定不但愿这种操做太频繁,因此一般要加大缓存数量,使得足以最大限度地缓存打开的表。它须要用到操做系统的资源以及内存,对当前的硬件配置来讲固然不是什么问题了。若是你有200多个表的话,那么设置为 1024 也许比较合适(每一个线程都须要打开表),若是链接数比较大那么就加大它的值。我曾经见过设置为100,000的状况。

thread_cache_size = 64
#线程的建立和销毁的开销可能很大,由于每一个线程的链接/断开都须要。我一般至少设置为 16。若是应用程序中有大量的跳跃并发链接而且 Threads_Created 的值也比较大,那么我就会加大它的值。它的目的是在一般的操做中无需建立新线程。

query_cache_size = 64M
#指定MySQL查询缓冲区的大小。能够经过在MySQL控制台执行如下命令观察:

# > SHOW VARIABLES LIKE ‘%query_cache%’;
# > SHOW STATUS LIKE ‘Qcache%’;
# 若是Qcache_lowmem_prunes的值很是大,则代表常常出现缓冲不够的状况;若是Qcache_hits的值很是大,则代表查询缓冲使用很是频繁,若是该值较小反而会影响效率,那么能够考虑不用查询缓冲;Qcache_free_blocks,若是该值很是大,则代表缓冲区中碎片不少。

tmp_table_size = 256M
max_connections = 768
#指定MySQL容许的最大链接进程数。若是在访问论坛时常常出现Too Many Connections的错误提 示,则须要增大该参数值。

max_connect_errors = 10000000
wait_timeout = 10
#指定一个请求的最大链接时间,对于4GB左右内存的服务器能够设置为5-10。

thread_concurrency = 8
#该参数取值为服务器逻辑CPU数量×2,在本例中,服务器有2颗物理CPU,而每颗物理CPU又支持H.T超线程,因此实际取值为4 × 2 = 8

skip-networking
#开启该选项能够完全关闭MySQL的TCP/IP链接方式,若是WEB服务器是以远程链接的方式访问MySQL数据库服务器则不要开启该选项!不然将没法正常链接!

show status 命令
含义以下:
aborted_clients 客户端非法中断链接次数
aborted_connects 链接mysql失败次数
com_xxx xxx命令执行次数,有不少条
connections 链接mysql的数量
Created_tmp_disk_tables 在磁盘上建立的临时表
Created_tmp_tables 在内存里建立的临时表
Created_tmp_files 临时文件数
Key_read_requests The number of requests to read a key block from the cache
Key_reads The number of physical reads of a key block from disk
Max_used_connections 同时使用的链接数
Open_tables 开放的表
Open_files 开放的文件
Opened_tables 打开的表
Questions 提交到server的查询数
Sort_merge_passes 若是这个值很大,应该增长my.cnf中的sort_buffer值
Uptime 服务器已经工做的秒数

提高性能的建议:1.若是opened_tables太大,应该把my.cnf中的table_cache变大2.若是Key_reads太大,则应该把my.cnf中key_buffer_size变大.能够用Key_reads/Key_read_requests计算出cache失败率3.若是Handler_read_rnd太大,则你写的SQL语句里不少查询都是要扫描整个表,而没有发挥索引的键的做用4.若是Threads_created太大,就要增长my.cnf中thread_cache_size的值.能够用Threads_created/Connections计算cache命中率5.若是Created_tmp_disk_tables太大,就要增长my.cnf中tmp_table_size的值,用基于内存的临时表代替基于磁盘的

相关文章
相关标签/搜索