mysql中pager命令的妙用

来源:互联网 发布:苹果广告屏蔽软件 编辑:程序博客网 时间:2024/05/22 08:08
mysql中pager命令的妙用
 
 在mysql 中,如果linux下,使用pager命令将大大提高工作效率,下面重点看几个例子: 
 
1 首先看下基本用法 
 
  mysql> pager less 
PAGER set to 'less' 
mysql> show engine innodb status\G 
 
   这个时候就可以开始使用了less模式了,可以使用空格到下一页,quit退出; 
甚至可以直接执行linux下的脚本,比如有个脚本在 /tmp/下的lock_waits.sh 
则可以: 
   mysql> pager /tmp/lock_waits 
PAGER set to '/tmp/lock_waits' 
 
  会执行/tmp/lock_waits的脚本
   
2 当要处理大量的数据集的时候,如果只想关心结果,可以这样: 
   mysql> pager cat > /dev/null 
PAGER set to 'cat > /dev/null' 
 
#比如执行一系列的冗长的执行计划语句 ,忽略中间过程输出,直接只显示耗时 
mysql> SELECT ... 
1000 rows in set (0.91 sec) 
 
mysql> SELECT ... 
1000 rows in set (1.63 sec) 
 
3 又比如,如果你在进行SQL调优,有大量的结果产生 
  mysql> SELECT ... 
[..] 
989 rows in set (0.42 sec) 
   可以通过checksum去比较每次调整后的SQL语句所产生的结果是否是相同的 
 
mysql> pager md5sum 
PAGER set to 'md5sum' 
 
# Original query 
mysql> SELECT ... 
32a1894d773c9b85172969c659175d2d  - 
1 row in set (0.40 sec) 
 
# Rewritten query - wrong 
mysql> SELECT ... 
fdb94521558684afedc8148ca724f578  - 
1 row in set (0.16 sec) 
  这里checksum不同,所以重写的SQL语句有问题 
   
4 如果有大量的连接,用show processlist看会比较不大方便,比如要知道哪些当前的连接是睡眠或者死掉的,就不大方便,可以这样: 
   mysql> pager grep Sleep | wc -l 
PAGER set to 'grep Sleep | wc -l' 
mysql> show processlist; 
337 
346 rows in set (0.00 sec) 
  马上看到当前有多少连接sleep了; 
  进一步,要知道每一种状态的连接情况,可以这样: 
    mysql> pager awk -F '|' '{print $6}' | sort | uniq -c | sort -r 
PAGER set to 'awk -F '|' '{print $6}' | sort | uniq -c | sort -r' 
mysql> show processlist; 
    309  Sleep       
      3 
      2  Query       
      2  Binlog Dump 
      1  Command 
 
当然,也可以用SQL查询的方式实现了: 
mysql> SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND='Sleep'; 
 
SELECT COMMAND,COUNT(*) TOTAL FROM INFORMATION_SCHEMA.PROCESSLIST GROUP BY COMMAND ORDER BY TOTAL DESC;
------------------------------------------------------------------------

从mysql performace blog 中学到的:

1. pager
例子
mysql> pager more
PAGER set to 'more'
mysql>show variables;
然后就使用more命令来显示“show variables”的输出

根据我的理解, pager之后可以跟任何shell命令来编辑 pager中输出的结果,pager会使用管道把结果传递给后面的命令。相对于“[mysql执行结果] | shell命令"例如:
mysql>pager grep log | more
PAGER set to "grep log | more"
mysql>show variables;
上面的例子用more来显示了所有变量名中带有“log”的变量。

操作完之后,可以使用一个空的pager命令关闭pager模式
mysql>pager
Default pager wasn't set, using stdout.

2. edit
该命令会打开一个编辑窗口来编辑你敲入的上一条命令。默认是一个vi 窗口,可以使用各种vi命令来编辑sql语句。
例如:
mysql>show tables;
...
mysql>edit 

                      //这里敲回车,注意这里没有分号
(在打开的vi中编辑,然后wq退出)
        >;                            //退出后在敲上 分号。 来执行这条编辑后的语句。

3. tee
该命令可以指定一个文件用来保存之后该session的所有输入和执行结果,例如:
mysql> tee /tmp/queries.log
Logging to file '/tmp/query.log'
[do your sql here]
mysql>exit;

cat /tmp/queries.log 来查看刚才输入的命令和结果
原创粉丝点击