转载注明出处,不过一般也不容易看懂。^_^~
for text mysql
mysqlslap Mysql5.1发型包中包含
sysbench 测试 cpu fileio oltp 内存分配 传输速度等
Mysql BenchMark Suite (sql-bench)单线程 但含大量测试单元
Super Smack Mysql与PostgreSQL的基准测试工具
benchmark()函数
MySQL性能分析 Profiling
慢查询记录
log_slow_queries 代表MYSQL慢查询的日志存储目录, 此目录文件一定要有写权限
long_query_time: 最长执行时间.
log-queries-not-using-indexes : log下来没有使用索引的query,可以根据情况决定是否开启
毫毛精确定义的补丁
Mysqldumpslow 原带
Mysql_slow_log_filter 可以理解毫秒精确的日志
Mysql_slow_log_parser 慢日志聚合、报表 规范化汇总
mysqlsla 规范化汇总
mysqladmin extended -r -i 10
使用Show status 分析查询
flush status;
select SQL_NO_CACHE ....
Show Session Status Like 'Select%'
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| Select_full_join | 1 | 没有使用索引的联表的数量
| Select_full_range_join | 0 | 在引用的表中使用范围搜索的
| Select_range | 1 | 在第一个表中使用范围的联接的数量
| Select_range_check | 0 | 在每一行数据后对键值进行检查的不带键值的联表的数量。如果不为0,你应仔细检查表的索引
| Select_scan | 2 | 对第一个表进行完全扫描的数量
+------------------------+-------+
Show Session Status Like 'Handler%'
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Handler_commit | 2 |
| Handler_delete | 0 |
| Handler_discover | 0 |
| Handler_prepare | 0 |
| Handler_read_first | 2 | 索引中第一条被读的次数,如果较高,服务器正执行大量全索引扫描
| Handler_read_key | 33831 | 根据键读一行的请求数,如果较高,说明查询和表的索引正确
| Handler_read_next | 0 | 按照键顺序读下一行的请求数
| Handler_read_prev | 0 | 按照键顺序读上一行的请求数,主要用于优化ORDER BY ... DESC
| Handler_read_rnd | 48 |
| Handler_read_rnd_next | 33977 |
| Handler_rollback | 0 |
| Handler_savepoint | 0 |
| Handler_savepoint_rollback | 0 |
| Handler_update | 33779 |
| Handler_write | 48 |
+----------------------------+-------+
show session status like 'Sort%'; mysql 在排序过程中的动作
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Sort_merge_passes | 0 | 排序算法已经执行的合并的数量。如果这个变量值较大,应考虑增加sort_buffer_size系统变量的值
| Sort_range | 0 | 在范围内执行的排序的数量
| Sort_rows | 200 | 已经排序的行数
| Sort_scan | 0 | 通过扫描表完成的排序的数量
+-------------------+-------+
show session status like 'Created%'; mysql为查询创建的临时表
+-------------------------+-------+
|
Variable_name
|
Value
|
+-------------------------+-------+
|
Created_tmp_disk_tables
|
0
|
服务器执行语句时在硬盘上自动创建的临时表的数量
|
Created_tmp_files
|
2
|
mysql已经创建的临时文件的数量
|
Created_tmp_tables
|
3
|
服务器执行语句时自动创建的内存中的临时表的数量。如果Created_tmp_disk_tables较大,你可能要增
+-------------------------+-------+ 加tmp_table_size值使临时 表基于内存而不基于硬盘
运行 show session status like 可能会对 Created_tmp_tables 产生影响
show profile
set profiling =1;
select * from
show profiles; 查看已经被分析过的查询
show profile;
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| (initialization) | 0.000083 |
| starting | 0.000083 |
| Opening tables | 0.000090 |
| System lock | 0.000008 |
| Table lock | 0.000010 |
| init | 0.000033 |
| optimizing | 0.000009 |
| statistics | 0.000011 |
| preparing | 0.000012 |
| Creating tmp table | 0.000043 |
| executing | 0.000007 |
| Copying to tmp table | 0.048096 |
| Sorting result | 0.000044 |
| Sending data | 0.000243 |
| end | 0.000006 |
| removing tmp table | 0.000010 |
| end | 0.000006 |
| query end | 0.000005 |
| freeing items | 0.000048 |
| logging slow query | 0.000006 |
| logging slow query | 0.000044 |
| cleaning up | 0.000007 |
+----------------------+----------+
其他
show innodb status
show mutex status
使用数据表嗅探工具 mysqlsniffer tcpdump
追踪mysql
show processlist
netstat -ntp | grep :37636
netstat -ntp | grep 16072/apache2
grep 389 /etc/services
ps -eaf | grep 'UID\|16072'
lsof -i -p | grep 16072
OProfile linux系统分析器
优化排序
Select <cols> From profiles Where sex = 'm' Order By rating Limit 10000,10
偏移量过多,应该减少mysql扫描即将被丢弃数据的时间,采取只取主键在链接回去的方式
Select <cols> From profiles Inner Join (
Select <primary key col> From profiles
Where sex = 'm' Order By rating Limit 10000,10
) as x USING (primary key cols)
索引统计
show index from **
ALTER Table 加速
Alter table film Modify Column rental_duration tinyint(3) NOT NULL default 5
应该为
Alter table file Alter Column rental_duratoiin Set Default 5