• 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

  • 相关阅读:
    SAS学习笔记27 卡方检验
    SAS学习笔记26 方差分析
    SAS学习笔记25 t检验(单个样本t检验、配对样本t检验、两个独立样本t检验及方差不齐时的t'检验)
    SAS学习笔记23 线性回归、多元回归
    HTML canvas画布
    HTML 新全局特性
    MYSQL数据库学习(五)如何自定义函数
    什么是单机结构?什么是集群?什么是分布式?
    MYSQL数据库学习(四)如何备份还原数据库
    MYSQL数据库学习(三)关于DML操作
  • 原文地址:https://www.cnblogs.com/xd502djj/p/3492819.html
Copyright © 2020-2023  润新知