欢迎来到天天文库
浏览记录
ID:9495647
大小:71.00 KB
页数:12页
时间:2018-05-01
《mysql性能的检查和调优方法--》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、mysql性能的检查和调优方法>> 我一直是使用mysql这个数据库软件,它工作比较稳定,效率也很高。在遇到严重性能问题时,一般都有这么几种可能: 1、索引没有建好; 2、sql写法过于复杂; 3、配置错误; 4、机器实在负荷不了; 1、索引没有建好 如果看到mysql消耗的cpu很大,可以用mysql的client工具来检查。 在linux下执行 /usr/local/mysql/bin/mysql-hlocalhost-uroot-p 输入密码,如果没有密码,则不用-p参数就可以进到客户端界面中。 看看当前的运行情况 shoysq
2、l就一定会有性能问题 如果出现了性能问题,则可以进行分析: 1、是不是有sql语句卡住了? 这是出现比较多的情况,如果数据库是采用myisam,那么有可能有一个写入的线程会把数据表给锁定了,如果这条语句不结束,则其它语句也无法运行。 查看processlist里的time这一项,看看有没有执行时间很长的语句,要留意这些语句。 2、大量相同的sql语句正在执行 如果出现这种情况,则有可能是该sql语句执行的效率低下,同样要留意这些语句。 然后把你所怀疑的语句统统集合一下,用desc(explain)来检查这些语句。 首先看看一个正常的desc输
3、出: mysql>descselect*fromimgsgid=1651768337; +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
4、id
5、select_type
6、table
7、type
8、possible_keys
9、key
10、key_len
11、ref
12、rogs
13、const
14、PRIMARY
15、PRIMARY
16、8
17、const
18、1
19、
20、 +----+-------------+-------+-------+---
21、------------+---------+---------+-------+------+-------+ 1roysql会从索引中查询imgid=1651768337这条记录,然后再到真实表中取出所有字段,是很简单的操作。 key是指明当前sql会使用的索引,mysql执行一条简单语句时只能使用到一条索引,注意这个限制;roysql>descselect*fromimgsiniorderbyclicksdesclimit10; +----+-------------+-------+------+---------------+-----
22、-+---------+------+-------+-----------------------------+
23、id
24、select_type
25、table
26、type
27、possible_keys
28、key
29、key_len
30、ref
31、rogs
32、ALL
33、NULL
34、NULL
35、NULL
36、NULL
37、12506
38、Usingysql执行时会把整个表扫描一遍,一条一条去找到匹配userid=7mini的记录,然后还要对这些记录的clicks进行一次排序,效率可想而知。真实执行时如果发现还比较快的话,那是因为服务器内存还足够将12506条比较短小的记录全部读入内存,所以还比较
39、快,但是并发多起来或者表大起来的话,效率问题就严重了。 这时我把userid加入索引: createindexuseridonimgs(userid); 然后再检查: mysql>descselect*fromimgsiniorderbyclicksdesclimit10; +----+------------1234下一页>>>>这篇文章来自..,。-+-------+------+---------------+--------+---------+-------+------+-----------------------------+
40、
41、id
42、select_type
43、table
44、type
45、possible_keys
46、key
47、key_len
48、ref
49、rogs
50、ref
51、userid
52、userid
53、51
54、const
55、8
56、Usingysql使用了userid这个索引搜索了,用userid索引一次搜索后,结果集有8条。然后虽然使用了filesort一条一条排序,但是因为结果集只有区区8条,效率问题得以缓解。 但是,如果我用别的userid查询,结果又会有所不同: mysql>descselect*fromimgsinorderbyclicksdesclimit10; +----+--
57、-----------+-------+------
此文档下载收益归作者所有