mysql 性能报告_mysql性能分析

索引

普通索引

Index(xx) 或者 key(xx)

MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。

唯一索引

UNIQUE INDEX UniqIdx(xx)

索引列中的值必须是唯一的,但是允许为空值

主键索引

PRIMARY KEY(id)

是一种特殊的唯一索引,不允许有空值。

组合索引

INDEX MultiIdx(id, name, age)

在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。

全文索引

只有在MyISAM引擎上才能使用,略

空间索引

只有在MyISAM引擎上才能使用,略

覆盖索引

定义:如果索引包含满足查询的所有数据,就称为覆盖索引。

MySQL只需要通过索引就可以返回查询所需要的数据,而不必在查到索引之后进行回表操作,减少IO,提高了效率。

当使用到了覆盖索引,使用EXPLAIN可以在Extra一列中看到“Using index”

一般配合组合索引生效(查询的字段是组合索引中的字段)

MySQL性能医生:orzdba

安装

先装各种perl相关的依赖包和控件

$ yum install -y perl-Test-Simple.x86_64 perl-Time-HiRes perl-ExtUtils-CBuilder

$ yum install -y perl-ExtUtils-MakeMaker perl-DBD-MySQL perl-DBI perl-Module-Build

注意my.cnf的配置,否则连不上

[mysqld]

略略略

socket=/home/apps/mysql/mysql.sock

# 需要增加以下配置,socket设置为[mysqld]下的数值

[client]

default-character-set=utf8

socket=/home/apps/mysql/mysql.sock

[mysql]

default-character-set=utf8

socket=/home/apps/mysql/mysql.sock

添加环境变量(实现免密码快速登录mysql)export MYSQL_PWD='hll@123'

设置orzdba可执行权限即可chmod 755 orzdba

使用

$ ./orzdba -h

==========================================================================================

Info :

Created By zhuxu@taobao.com

Usage :

Command line options :

-h,--help Print Help Info.

-i,--interval Time(second) Interval.

-C,--count Times.

-t,--time Print The Current Time.

-nocolor Print NO Color.

-l,--load Print Load Info.

-c,--cpu Print Cpu Info.

-s,--swap Print Swap Info.

-d,--disk Print Disk Info.

-n,--net Print Net Info.

-P,--port Port number to use for mysql connection(default 3306).

-S,--socket Socket file to use for mysql connection.

-com Print MySQL Status(Com_select,Com_insert,Com_update,Com_delete).

-hit Print Innodb Hit%.

-innodb_rows Print Innodb Rows Status(Innodb_rows_inserted/updated/deleted/read).

-innodb_pages Print Innodb Buffer Pool Pages Status(Innodb_buffer_pool_pages_data/free/dirty/flushed)

-innodb_data Print Innodb Data Status(Innodb_data_reads/writes/read/written)

-innodb_log Print Innodb Log Status(Innodb_os_log_fsyncs/written)

-innodb_status Print Innodb Status from Command: 'Show Engine Innodb Status'

(history list/ log unflushed/uncheckpointed bytes/ read views/ queries inside/queued)

-T,--threads Print Threads Status(Threads_running,Threads_connected,Threads_created,Threads_cached).

-rt Print MySQL DB RT(us).

-B,--bytes Print Bytes received from/send to MySQL(Bytes_received,Bytes_sent).

-mysql Print MySQLInfo (include -t,-com,-hit,-T,-B).

-innodb Print InnodbInfo(include -t,-innodb_pages,-innodb_data,-innodb_log,-innodb_status)

-sys Print SysInfo (include -t,-l,-c,-s).

-lazy Print Info (include -t,-l,-c,-s,-com,-hit).

-L,--logfile Print to Logfile.

-logfile_by_day One day a logfile,the suffix of logfile is 'yyyy-mm-dd';

and is valid with -L.

Sample :

shell> nohup ./orzdba -lazy -d sda -C 5 -i 2 -L /tmp/orzdba.log > /dev/null 2>&1 &

==========================================================================================

# 输出到文件

$ nohup ./orzdba -lazy -d sda -C 5 -i 2 -L /tmp/orzdba.log > /dev/null 2>&1 &

慢查询日志配置

慢查询相关参数查看:

$ SHOW VARIABLES LIKE 'slow_query%';

$ SHOW VARIABLES LIKE 'long_query_time';

直接修改配置文件:

# 是否开启慢查询日志

slow_query_log=1

# 指定保存路径及文件名,默认为数据文件目录,

slow_query_log_file=/home/logs/mysql/mysql-slow.log

# 指定多少秒返回查询的结果为慢查询

long_query_time=1

# 记录所有没有使用到索引的查询语句

log_queries_not_using_indexes=1

# 记录那些由于查找了多于1000行而引发的慢查询

min_examined_row_limit=1000

# 记录那些慢的管理语句:optimize table,analyze table和alter table语句

log_slow_admin_statements=1

# 记录由Slave所产生的慢查询

log_slow_slave_statements=1

或命令行方式修改:

$ set global slow_query_log=1;

$ set global slow_query_log_file=/home/logs/mysql/mysql-slow.log;

$ set long_query_time=1;

$ set global log_queries_not_using_indexes=1;

$ set global min_examined_row_limit=1000;

$ set global log_slow_admin_statements=1;

$ set global log_slow_slave_statements=1;

常用分析命令

缓存

# 缓存相关参数查看

$ SHOW VARIABLES LIKE '%query_cache%';

# 查看缓存命中情况

$ show status like '%qcache%';

# 关闭/开启缓存(特定性能测试中为避免走到缓存可以先关闭)

# 动态修改:

$ set global query_cache_size=0;

$ set global query_cache_type=0;

# 或my.cnf配置修改:

query_cache_type=0

query_cache_size=0

# 直接指定用/不用缓存

Select sql_no_cache count(*) from pythonlearn.lianjia;

Select count(*) from pythonlearn.lianjia;

表状态

# 显示哪些进程正在运行,可以杀掉进程,如:kill 1825;

# 显示前100条

$ SHOW PROCESSLIST;

# 显示所有

$ SHOW FULL PROCESSLIST;

# 显示哪些表的打开的

$ SHOW OPEN TABLES;

# In_use列表示有多少线程正在使用某张表

# Name_locked表示表名是否被锁,这一般发生在Drop或Rename命令操作这张表时

事务

# 查询正在执行的事务

SELECT * FROM information_schema.INNODB_TRX

# 查看正在锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS

# 查看等待锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS

查看正在执行的sql

只能看到正在执行的select * from information_schema.PROCESSLISTwhere info is not null;

查看完整的

# 1. 开启日志

$ SET GLOBAL log_output = 'TABLE';

$ SET GLOBAL general_log = 'ON';

# 2. 查询日志

$ SELECT * from mysql.general_log ORDER BY event_time DESC;

$ 3. 清空表(这个表不允许使用delete,只能用truncate)

$ truncate table mysql.general_log;

# 4. 最后记得关闭

$ SET GLOBAL general_log = 'OFF';

其他

# 修改密码

# 查看密码复杂度

$ SHOW VARIABLES LIKE 'validate_password%';

# 修改密码验证等级

$ SET GLOBAL validate_password_policy=LOW;

# 密码最小长度限制修改(最小是4)

$ SET GLOBAL validate_password_length=6;

# 允许远程连接:

$ GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

FLUSH PRIVILEGES;

配置优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值