MySql笔记——运维常用命令

【转载】原文:https://blog.csdn.net/Mark_Chao/article/details/81018373

针对SQL语句维护,运行的命令以及命令详解

  • 显示当前session中所有的统计参数(对于所有存储引擎的表操作都会有累计),常关心的几个参数
    show status like 'Com_%';

    上面输出参数比较常用的了解一下:
    Com_select: 执行select次数,一次查询只累加1
    Com_insert: 执行insert次数,对于批量插入,只累计1
    Com_update: 执行update次数,执行update次数
    Com_delete: 执行delete次数,执行delete次数

  • 只针对InnoDB存储引擎
    show status like 'Innodb_rows_%';

    上面输出参数比较常用的了解一下:
    Innodb_row_read: SELECT查询返回行数
    Innodb_row_inserted: 执行INSERT操作插入行数
    Innodb_row_updated: 执行UPDATE操作更新行数
    Innodb_row_deleted: 执行DELETE操作删除行数

  • 试图连接Mysql服务器次数
    show status like 'Connections';

  • 服务器工作时间
    show status like 'Uptime';

  • 慢查询次数
    show status like 'Slow_queries';

  • 通过explain和desc来查看执行计划
    explain/desc query_statement(SQL语句)

    对执行计划的每个列进行说明
    一、select_type:表示SELECT的类型,常见取值有

    1. SIMPLE(简单表,即不使用表连接或者子查询),
    2. PARMARY(主查询,即外层查询),
    3. UNION(UNION中的第二个或者后面的查询语句),
    4. SUBQUERY(子查询第一个SELECT)。
    5. DERIVED(派生表 From 里面的子查询)

    二、table:输出表结果

    三、type:表示在MYSQL在表中找到所需行的方式,或者叫访问类型,以下类型是从左到右,性能由最差变最好
    all->index->range->ref->eq_ref->const,system->null

    1. type=all :全表扫描,MYSQL遍历全表来找来匹配行
    2. type=index :搜索全扫描,MYSQL遍历整个索引来查询匹配行
    3. type=range :索引扫描范围,常见于<、<=、>、>=等操作
    4. type=ref :使用非唯一索引扫描或唯一索引的前缀扫描,返回匹配某个单独值的记录行(ref经常出现在join中)
    5. type=eq_ref :使用唯一索引,对于每个检索值,表中只有一条记录匹配。(多表关联中使用primary key 或者unique index 为关联条件)
    6. type=const/system :单表中最多有一个匹配行,查询起来非常速度,所以这个匹配行中的其他列的值可以被优化器在当前查询中当做常量
      来处理,例如,根据主键primary key 或 唯一索引 unique index 进行查询。
    7. type=null :MYSQL不用访问表或者索引,直接就能够得到结果,例如,select 1 from dual where 1

    四、possible_keys:表示查询时可能用到的索引
    五、key:表示实际使用的索引
    六、key_len:使用到索引字段长度
    七、rows:扫描行的数量
    八、Extra:执行情况的说明和描述,包含不适合在其他列中显示但对执行计划非常重要的额外信息。

    使用 explain extended 命令加上 show warnings,我们能够看到SQL真正执行之前优化器做了哪些处理。可以查看到经过优化后的sql语句

    案例:

  EXPLAIN EXTENDED
  select DISTINCT c.Tag
  from be_Blogs a 
  join be_Posts b on a.BlogId = b.BlogID
  join be_PostTag c on c.BlogID = b.BlogID;
  SHOW WARNINGS

  explain partitions -- 查看sql所访问的分区
  EXPLAIN PARTITIONS
  select DISTINCT c.Tag
  from be_Blogs a 
  join be_Posts b on a.BlogId = b.BlogID
  join be_PostTag c on c.BlogID = b.BlogID;
  • 查看是否支持show profiles
    select @@have_profiling;

  • 设置profiles开启
    set profiling = 1;

    可以通过 show profiles 查看当前SQL的 QueryID 值为多少

  select DISTINCT c.Tag
  from be_Blogs a 
  join be_Posts b on a.BlogId = b.BlogID
  join be_PostTag c on c.BlogID = b.BlogID;
  show profiles
  • 查看执行过程中(通过show profile 查询出来的QueryID)线程每个状态和消耗时间
    show profile for query QueryID;

  • 选择查看CPU耗费时间
    show profile cpu for query QueryID;

  • 查看SQL解析执行过程中每个步骤对应的源码的文件、函数名以及具体的源文件行数。
    show profile source for query 140;

Mysql 锁信息查询语句

  • 输出一个字符串文本,可以额外研究,内含信息量的信息,对数据库整体运行情况,对高性能调优很有帮助
    show engine innodb status;

  • 现在获取的锁,但是不含没有获取的锁,而且只是针对INNODB的。
    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

  • 包含了所有正在执行的的事物相关信息(INNODB),而且包含了事物是否被阻塞或者请求锁。
    select * from information_schema.innodb_trx;

  • 系统锁等待相关信息,包含了阻塞的一行或者多行的记录,而且还有锁请求和被阻塞改请求的锁信息等。
    select * from information_schema.INNODB_LOCK_WAITS;

  • 查看正在被锁定的的表
    show OPEN TABLES where In_use > 0;


MySQL常用命令汇总(偏向运维管理)

基础部分

  1. select @@version;##查询当前mysql的版本.

  2. show variables like 'port';##查看mysql实例的端口。

  3. show variables like 'socket';##查看实例的socket数据。

  4. show variables like 'datadir';##查看实例的数据路径。

  5. show databases; ##显示所有数据库名的命令 。

  6. desc tablename; ## 显示表结构和列结构的命令。

  7. show processlist \G;##显示正在执行的线程。

  8. explain ##查看语句的执行计划。

  9. show index from table_name ##查看表的索引情况。

  10. select * from STATISTICS where table_name='XXX'\G ##查看表的统计信息。

  11. select @@max_allowed_packet; ## 查询定义的packet大小。

  12. show master status;##查看master状态。可以查看 最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值
    show slave status;##查看slave状态。

  13. show master logs;##查看所有的log文件,在主服务器上执行。(即查看所有binlog日志列表)

  14. purge binary logs to 'mysql-bin3306.000003'; ##mysql-bin3306.000003之前的日志被purge。

  15. show warnings; ##显示最近的警告详情。

  16. show variables \G; ##查看当前mysqld的所有参数,包括默认值。

  17. show grants for 'username'@'hostip' \G; ##查看某一个用户的权限,请替换参数username 和 hostip。

  18. show create table tablename \G; ##查看某表的创建脚本

实例参数部分

  1. show variables like 'log_slave%' \G; ##指定条件的参数设置查询,例如查询以log_slave开头的参数设置。

  2. show variables like 'slow_query_log';##查看是否开启了慢查询日志;ON代表开启。可以在线打开。set global slow_query_log = 1;

  3. show variables like 'slow_query_log_file';## 查看慢查询日志的路径。

  4. show variables like 'long_query_time'; ##查看慢查询定义的阈值,单位是秒。记录的查询是大于该值,不包括该值。

  5. show variables like 'log_output'; ##查看日志的输出格式(file或table)。

  6. show variables like 'log_timestamps';##查看日志的时间信息,UTC时间或者SYSTEM时间。

  7. show variables like 'log_slow_slave_statements';##查看从服务器是否开启慢查询日志,ON代表开启。

  8. show variables like 'log_queries_not_using_indexes';##将没有使用索引的SQL语句记录到慢查询日志中。

  9. show variables like 'log_throttle_queries_not_using_indexes';##集合上面的参数一起使用,限制每分钟内,在慢查询日志中,记录没有使用索引的次数。避免日志快速增长。

  10. show variables like "default%tmp%";查看创建的临时表的存储引擎类型。

  11. show variables like 'innodb_log_file_size';##查询log文件大小。

  12. show variables like 'innodb_page_size'; ##查询页的大小。一旦数据库通过innodb_page_size设置完成,则后续无法更改。innodb_page_size 是针对普通表的,压缩表不受限制。

  13. show variables like 'innodb_buffer_pool_size';##查看缓冲池的大小,每次读写数据都是通过buffer pool;当buffer pool中没有所需的数据时,才去硬盘中获取。该值设置的越大越好。buffer pool 也是以页(page)为单位的,且大小和innodb_page_size一致。

  14. show variables like 'innodb_buffer_pool_instances'; ##设置多少个缓冲池。设置多个instance可将热点打散,提高并发性能(建议设置成cpu 个数值)

  15. show engine innodb status \G;##查看buffer pool的状态。

  16. set global innodb_buffer_pool_size=2*1024*1024*1024;##在线调整innodb_buffer_pool_size。MySQL 5.7之前的版本,修改该值,需要重启。

  17. show variables like 'innodb_buffer_pool_dump_at_shutdown'; ##在MySQL 5.6 以后,可以在停机的时候dump出buffer pool的数据,然后在启动的时候Load进buffer pool。该功能可以在MySQL启动时自动预热,无需人工干预。

  18. show variables like 'innodb_buffer_pool_dump_pct';##dumpd 百分比,是每个buffer pool文件,而不是整体。

  19. show variables like 'innodb_buffer_pool_load_at_startup';## 启动时加载dump的文件,恢复到buffer pool中。dump的越多,启动的越慢。

  20. select * from innodb_lock_waits;##查看锁的信息,在数据库sys下执行。

  21. show variables like 'transaction_isolation'; ##查看隔离级别

  22. set transaction_isolation='read-committed'; ##设置隔离级别。

  23. show variables like 'innodb_print_all_deadlocks';##设置为ON,表示将死锁信息打印到err_log中。

  24. show variables like "%innodb_flush_log_at_timeout%";##master thread 每秒刷新redo的buffer到logfile。5.7版本可以设置刷新间隔时间,默认是1秒。

  25. show variables like 'binlog_format';##查看binlog的类型。statement 记录SQL语句;ROW 记录SQL语句操作的那些行(行的变化);mixed 混合statement 和 Row 格式(不推荐)。


补充:
show status like 'Handler_read%';
MySQL:Innodb Handler_read_*变量解释

你可能感兴趣的:(MySql笔记——运维常用命令)