这两天在测试一个程序,该程序对mysql数据库有较大数据量的访问,最近,一不小心出现了无法查询的情况。

利用navicat排查服务器状态发现,很多进程都locked了,有一条查询语句一直处于sending data状态,其他进程全部locked。

结束这个进程之后,mysql数据库又恢复正常。

因此,遇到mysql被locked的情况,有以下几种处理方法:

1. 关闭导致locked的进程;

2. 多次查询,处理工作全部交给程序来做,减轻数据库负担;

3. 优化服务器:

以下转自ChinaUnix论坛一个帖子:

数据库有7G数据,随着数据的增大,现在每天出现一次崩溃。
mysqladmin processlist 查询进程,发现locked进程超多,而且一直locked不会解锁,到最后整个mysql被locked进程占满,崩溃。

是否和my.cnf里如下配置有关。

根据网上资料,做了如下配置,效果不是很明显:
MySQL调优性能的系统变量

(1)、back_log: 
要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。 
back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。 
当你观察你的主机进程列表,发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时,就要加大 back_log 的值了。默认数值是50,我把它改为500。

(2)、interactive_timeout: 
服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 CLIENT_INTERACTIVE 选项的客户。 默认数值是28800,我把它改为7200。

(3)、key_buffer_size: 
索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8M),我的MySQL主机有2GB内存,所以我把它改为402649088(400MB)。

(4)、max_connections: 
允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 Too many connections 错误。 默认数值是100,我把它改为1024 。

(5)、record_buffer: 
每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072(128K),我把它改为16773120 (16M)

(6)、sort_buffer: 
每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。默认数值是2097144(2M),我把它改为 16777208 (16M)。

(7)、table_cache: 
为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。

(8)、thread_cache_size: 
可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。我把它设置为 80。

(10)、wait_timeout: 
服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800,我把它改为7200。

mysql> show engines;
+------------+----------+----------------------------------------------------------------+
| Engine     | Support  | Comment                                                        |
+------------+----------+----------------------------------------------------------------+
| MyISAM     | DEFAULT  | Default engine as of MySQL 3.23 with great performance         | 
| MEMORY     | YES      | Hash based, stored in memory, useful for temporary tables      | 
| InnoDB     | DISABLED | Supports transactions, row-level locking, and foreign keys     | 
| BerkeleyDB | NO       | Supports transactions and page-level locking                   | 
| BLACKHOLE  | NO       | /dev/null storage engine (anything you write to it disappears) | 
| EXAMPLE    | NO       | Example storage engine                                         | 
| ARCHIVE    | YES      | Archive storage engine                                         | 
| CSV        | NO       | CSV storage engine                                             | 
| ndbcluster | NO       | Clustered, fault-tolerant, memory-based tables                 | 
| FEDERATED  | NO       | Federated MySQL storage engine                                 | 
| MRG_MYISAM | YES      | Collection of identical MyISAM tables                          | 
| ISAM       | NO       | Obsolete storage engine                                        | 
+------------+----------+-----------------------------------------------------------

mysql> show processlist;
+--------+---------+---------------------+--------+---------+------+-------+------------------+
| Id     | User    | Host                | db     | Command | Time | State | Info             |
+--------+---------+---------------------+--------+---------+------+-------+------------------+
|   7572 | bbsuser | 61.152.X.89:1885  | wy**| Sleep   | 4569 |       | NULL             | 
| 235419 | bbsuser | 61.152.X.89:1935  | wy** | Sleep   |    7 |       | NULL             | 
| 262995 | root    | localhost           | NULL   | Query   |    0 | NULL  | show processlist | 
| 263404 | bbsuser | 61.152.X.76:53934 | wy** | Sleep   |   93 |       | NULL             | 
| 263948 | bbsuser | 61.152.X.76:54559 | wy** | Sleep   |    9 |       | NULL             | 
| 263986 | bbsuser | 61.152.X.76:54600 | wy** | Sleep   |    4 |       | NULL             | 
| 264005 | bbsuser | 61.152.X.76:54623 | wy** | Sleep   |    1 |       | NULL             | 
| 264010 | bbsuser | 61.152.X.76:54629 | wy** | Sleep   |    0 |       | NULL             | 
+--------+---------+---------------------+--------+---------+------+-------+------------------+
8 rows in set (0.00 sec)

1. 升级基本上没帮助
2. 改用innodb试试看
3. 优化你的sql
4. 优化你的索引,缓存等
5. 优化你的程序
6. 换更好的server

vi /etc/my.cnf

# The following options will be passed to all MySQL clients
[client]
#password       = your_password
port            = 3306
socket          = /tmp/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-bdb
skip-innodb
skip-locking
back_log=500
skip-name-resolve
#interactive_timeout=20
#wait_timeout=5
#connect_timeout=10
max_connections=10000
key_buffer = 512M
max_allowed_packet = 4M
table_cache = 1024
sort_buffer_size = 32M
read_buffer_size = 32M
join_buffer_size=32M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 128M
thread_cache_size = 64
query_cache_limit=4M
query_cache_size = 64M
query_cache_type=1
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8

#
#skip-networking

# Replication Master Server (default)
# binary logging is required for replication
#log=/usr/local/mysql/data/mysql.log

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id       = 1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

很多时候MYISAM锁表是由于查询语句的问题,我公司的数据库也是这样的情况,我有次观察到连接量的高峰值竟会达到5000,当时觉得很奇怪,因为根据状态参数最多连接量也是百来个,抓取当时的快照才发现,都是LOCKED ,就象马路上的车一样一辆堵了引起整条路交通瘫痪,而首先引起LOCK的是一条很恶心的查询,而这条查询又频繁出现。
我觉得你还是得从分析引起LOCK的查询入手

关于mysql出现大量locked进程相关推荐

  1. mysql启动错误1067进程意外终止的解决方法

    mysql启动错误1067进程意外终止的解决方法 参考文章: (1)mysql启动错误1067进程意外终止的解决方法 (2)https://www.cnblogs.com/huhyoung/p/960 ...

  2. mysql创建索引以及进程过程中出现的问题

    今天临近下班同事发现线上访问非常卡.show processlist;发现经过查询发现是mysql进程数太多了,1400多条进程,其中有处于等待的,删除临时表的. 原来是因为一个表索引的问题 sele ...

  3. Windows环境下启动Mysql服务提示“1067 进程意外终止”的解决方案

    2019独角兽企业重金招聘Python工程师标准>>> 在Windows服务里启动Mysql服务时提示"1067 进程意外终止". 此时我们打开计算机管理查看Wi ...

  4. mysql服务无法启动进程意外终止_mysql服务无法启动 1067 错误,进程意外终止

    mysql服务无法启动 1067 错误,进程意外终止 2015年02月10号 发表于:评论 () 热度:1148 今天window服务器上的mysql 服务 无法启动 , 查看应用程序日志 提示 &q ...

  5. Centos运行Mysql因为内存不足进程被杀

    今天刚刚申请了一个新的域名,在申请完域名刚准备绑定给小伙伴分享注册新域名的喜悦时,刚把网站发到我们小伙伴们的讨论群里,却发现访问不了了,提示,数据库连接失败! 真的时一个尴尬.....    所有人都 ...

  6. MySQL查看连接数和进程信息

    1.查看连接信息 myusql > show status like '%connect%'; Aborted_connects 尝试连接到MySQL服务器失败的次数, Threads_conn ...

  7. mysql 上下文切换高_进程/线程上下文切换会用掉你多少CPU?

    进程是操作系统的伟大发明之一,对应用程序屏蔽了CPU调度.内存管理等硬件细节,而抽象出一个进程的概念,让应用程序专心于实现自己的业务逻辑既可,而且在有限的CPU上可以"同时"进行许 ...

  8. mysql+查看端口和进程,linux查看端口、进程以及kill情况

    看端口: ps -aux | grep tomcat 发现并没有8080端口的Tomcat进程. 使用命令:netstat –apn 查看所有的进程和端口使用情况.发现下面的进程列表,其中最后一栏是P ...

  9. mysql 查看僵死的进程_如何查看并杀死僵死进程

    这些进程已经死亡,但没有释放系统资源,包括内存和一些一些系统表等,如果这样的进程很多,会引发系统问题.用ps -el看出的进程状态如果是Z,就是僵尸进程. ps -ef|grep defunc可以找出 ...

最新文章

  1. apache和PHP配置文件
  2. STM32的can现场总线实验心得
  3. ASP.Net分页组件1.0开发下载了...
  4. 求任意10个数中的正数之和及个数,函数实现体会地址传递
  5. php使用array_filter()和回调删除数组中的某个元素
  6. 雅虎与软银构和:拟出售雅虎日本35%股份
  7. Visual Studio 远程调试正在运行的进程
  8. C++之explicit关键字使用总结
  9. acm之java输入输出_ACM中Java输入输出
  10. 杭电2066一个人的旅行
  11. C项目案例实践(0)-语言基础
  12. mysql 表 页 行_Mysql之InnoDB行格式、数据页结构
  13. GHOSTXP_SP3
  14. laravel5的Bcrypt加密方式对系统保存密码的小结
  15. nginx命令和配置
  16. html缩放背景不缩放_如何在缩放通话中静音
  17. 信号与系统:综述【知识梳理】
  18. python编写一个简单的程序验证码_遇到验证码怎么办?Python编写一个验证码图片数据标注GUI程序!...
  19. Git 配合G码云使用基本操作相关指令
  20. win10 手动下载升级 Powershell terminal

热门文章

  1. 仿 vue-cli 搭建属于自己的脚手架
  2. 车萝卜CEO马斌斌:真正自动驾驶的时候你更需要HUD和ARHUD...
  3. Know more about Enqueue Deadlock Detection
  4. 全球市场第一季度下跌0.8%,思科的WLAN份额再次下跌
  5. Exchange2010 SP1部署边缘服务器
  6. C# xsd转C#类(转)
  7. [转载]WSDL 教程
  8. 解题:洛谷3402 可持久化并查集
  9. 【经典】Noip动态规划
  10. 面试题:判断字符串是否回文