• Mysql进程管理


    mysql> show processlist;
    +----+------+-----------+------+---------+------+-------+------------------+
    | Id | User | Host      | db   | Command | Time | State | Info             |
    +----+------+-----------+------+---------+------+-------+------------------+
    |  7 | root | localhost | yy   | Sleep   |  154 |       | NULL             |
    |  8 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
    +----+------+-----------+------+---------+------+-------+------------------+
    2 rows in set (0.00 sec)

    mysql> kill 7
        -> ;

    mysql> show processlist;
    +----+------+-----------+------+---------+------+-------+------------------+
    | Id | User | Host      | db   | Command | Time | State | Info             |
    +----+------+-----------+------+---------+------+-------+------------------+
    |  8 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
    +----+------+-----------+------+---------+------+-------+------------------+
    1 row in set (0.00 sec)

    -----

    每个与mysqld的连接都在一个独立的线程里运行,您可以使用SHOW PROCESSLIST语句查看哪些线程正在运行,并使用KILL thread_id语句终止一个线程。

    KILL允许自选的CONNECTIONQUERY修改符:

    ·         KILL CONNECTION与不含修改符的KILL一样:它会终止与给定的thread_id有关的连接。

    ·         KILL QUERY会终止连接当前正在执行的语句,但是会保持连接的原状。

    如果您拥有PROCESS权限,则您可以查看所有线程。如果您拥有SUPER权限,您可以终止所有线程和语句。否则,您只能查看和终止您自己的线程和语句。

    您也可以使用mysqladmin processlistmysqladmin kill命令来检查和终止线程。

    注释:您不能同时使用KILLEmbedded MySQL Server库,因为内植的服务器只运行主机应用程序的线程。它不能创建任何自身的连接线程。

    当您进行一个KILL时,对线程设置一个特有的终止标记。在多数情况下,线程终止可能要花一些时间,这是因为终止标记只会在在特定的间隔被检查:

    ·         SELECT, ORDER BYGROUP BY循环中,在读取一组行后检查标记。如果设置了终止标记,则该语句被放弃。

    ·         ALTER TABLE过程中,在每组行从原来的表中被读取前,检查终止标记。如果设置了终止标记,则语句被放弃,临时表被删除。

    ·         UPDATEDELETE运行期间,在每个组读取之后以及每个已更行或已删除的行之后,检查终止标记。如果终止标记被设置,则该语句被放弃。注意,如果您正在使用事务,则变更不会被 回滚。

    ·         GET_LOCK()会放弃和返回NULL

    ·         INSERT DELAYED线程会快速地刷新(插入)它在存储器中的所有的行,然后终止。

    ·         如果线程在表锁定管理程序中(状态:锁定),则表锁定被快速地放弃。

    ·         如果在写入调用中,线程正在等待空闲的磁盘空间,则写入被放弃,并伴随"disk full"错误消息。

    ·         警告:对MyISAM表终止一个REPAIR TABLEOPTIMIZE TABLE操作会导致出现一个被损坏的没有用的表。对这样的表的任何读取或写入都会失败,直到您再次优化或修复它(不中断)。

    转自 http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#load-index

    mysql 有选择地kill process


    show processlist / show full processlist 可以看到当前的process信息,
    如果想要kill某些process,只能复制它的Id(thread id),然后kill, 每次只能kill一个。
    如果要kill掉所有运行时间超过10秒的语句,这样搞起来就太麻烦了。
    今天介绍个简单的办法,主要是通过INFORMATION_SCHEMA数据库来实现。
    其中的PROCESSLIST表记录了process的信息。


    找出运行时间超过10秒的process的ID。
    SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST 
    WHERE COMMAND = 'Query' AND TIME > 10;
    这样似乎太莽撞了,有些进程不应该被kill的,比如负责replication的。。。
    需要过滤一下:


    SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST 
    WHERE COMMAND = 'Query' AND TIME > 10 
    AND ID != CONNECTION_ID() 
    AND USER != 'root' 
    AND COMMAND != 'Binlog Dump' 
    AND STATE NOT REGEXP '(slave|relay|event)'
    你也可以根据实际情况加入自己的过滤条件。


    然后比较悲剧的是 kill 只能接受一个id做为参数。
    只好生成所有的kill语句了:


    mysql> SELECT CONCAT('KILL ',ID,';')
    FROM   INFORMATION_SCHEMA.PROCESSLIST
    WHERE  USER = 'webs'
           AND COMMAND = 'Query'
           AND TIME > 10
      INTO   OUTFILE '/tmp/kill_list.txt';
    然后再导入:


    注意下面这行语句不是以分号结尾的
    mysql> . /tmp/kill_list.txt
    Query OK, 0 ROWS affected (0.00 sec)
    虽然现在智能多了,但是这样搞一回也还是比较麻烦的。
    可以试试看 Percona Toolkit里面的 pt-kill, 祝你们好运

    转自http://blog.csdn.net/hewy0526/article/details/8240710

  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/xd502djj/p/3492819.html
Copyright © 2020-2023  润新知