如何解决mysql查询百万数据时出现大量sleep的进程

问题描述

如何解决mysql查询百万数据时出现大量sleep的进程

如何解决mysql查询百万数据时出现大量sleep的进程:
当使用jdbc 查询数据量为100多万的数据时,mysql会出现大量sleep的进程,然后程序便会卡死在那儿

解决方案

描述的有点泛泛,如果能把使用场景、涉及库表定义发一下会更容易分析。
大量sleep进程可能并不是问题,因为如果使用到连接池的话,一开始就是初始化一些连接,这些连接没有使用的话,在mysql看可能就是sleep的。
从你描述,感觉“查询数据量为100多万的数据”效率较低,这会增加mysql负载,可以考虑优化,从下面几个地方入手看看:
1、优化查询sql,尽量用上索引,避免嵌套子查询等
2、优化库表引擎,提搞并发
3、优化库表索引,提高检索效率

觉得有必要的话可以把相关程序逻辑和库表设计发出来看看

解决方案二:

1、百万的数据可以考虑分表
2、缓存进来,如果不需要实时的话,memcache和redis都是不错的选择
3、mysql主从,让查询走单独的服务器

解决方案三:

可以考虑nodejs,将部分数据暂时缓存在客户端,然后再统一写入数据库

解决方案四:

连接操作完了要释放掉呀

时间: 2024-09-21 04:46:39

如何解决mysql查询百万数据时出现大量sleep的进程的相关文章

解决mysql导入导出数据乱码问题

  最近在linux上面用mysqldump导出数据,放在windows系统中导入就会出现中文乱码,然后就会导致出现: Unknown MySQL server host和Can't connect to the server的错误. 解决mysql导入导出数据乱码问题就是统一导入导出的编码,linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqldump的时候需要加上--

php中如何设置mysql查询读取数据的超时时间

现象: php能通过代理正常连接到mysql.但是,执行query后,一直等待,没有任何数据返回. 结果导致php-fpm进程全部阻塞在读取数据的地方.不能处理其他正常请求. 解决方法: 可以通过设置mysql查杀的超时时间来解决这个问题. 第一种设置mysql查询超时时间的方法是使用mysqlnd. 关于msyqlnd的介绍,大家可以看下这篇文章 http://www.bo56.com/php-mysqlnd-简介/ php启用mysqlnd扩展后,只要在php.ini文件中设置 mysqln

php设置mysql查询读取数据的超时时间

现象:php能通过代理正常连接到mysql.但是,执行query后,一直等待,没有任何数据返回. 结果导致php-fpm进程全部阻塞在读取数据的地方.不能处理其他正常请求.解决方法: 可以通过设置mysql查杀的超时时间来解决这个问题. 第一种设置mysql查询超时时间的方法是使用mysqlnd. php启用mysqlnd扩展后,只要在php.ini文件中设置 mysqlnd.net_read_timeout 即可. 参数值的单位为秒.如: mysqlnd.net_read_timeout =

MySQL查询随机数据的4种方法和性能对比

 从MySQL随机选取数据也是我们最常用的一种发发,其最简单的办法就是使用"ORDER BY RAND()",本文介绍了包括ORDER BY RAND()的4种获取随机数据的方法,并分析了各自的优缺点. 下面从以下四种方案分析各自的优缺点. 方案一:  代码如下:SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1; 这种方法的问题就是非常慢.原因是因为MySQL会创建一张零时表来保存所有的结果集,然后给每个结果一个随机索引,然后再排序并返回.

MYSQL数据库导入数据时出现乱码的解决办法_Mysql

首先在新建数据库时一定要注意生成原数据库相同的编码形式,如果已经生成可以用phpmyadmin等工具再整理一次,防止数据库编码和表的编码不统一造成乱码. 方法一: 通过增加参数 –default-character-set = utf8 解决乱码问题 mysql -u root -p password < path_to_import_file –default-character-set = utf8 方法二: 在命令行导入乱码解决 1. use database_name; 2. set n

python Mysql查询更新数据例子

python操作Mysql,很方便,使用的MySQLdb的库,基本的操作如下: 查询:  1 try:  2     conn = MySQLdb.connect(host=self.ip, user=self.username,passwd=self.password, db=self.dbname, port=self.port)  3     cur = conn.cursor()  4     cur.execute(sql)  5     rows = cur.fetchall()  

解决Mysql数据库插入数据出现问号(?)的解决办法_Mysql

首先,我用的mysql数据库是5.7.12版本. 出现的问题: 1.插入数据显示错误,插入不成功,出现:Incorrect string value: '\xCD\xF5\xD5\xBC\xBE\xA9' for column 'Sname' at row 1 2.插入中文,虽然插入成功,但是显示:?? 解决方法: 在my.ini文件中的 [mysqld] 中加入 #character-set-server=utf8 如图所示,必须在蓝圈的上方,就是说,蓝圈内的内容必须在[mysqld]的最下面

mysql查询大量数据异常

问题描述 The driver was unable to create a connection due to an inability to establish the client portion of a socket.This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable. For Unix

解决MYSQL导入脚本数据中文乱码

stu_data.sql中含有中文,要将该脚本数据导入数据库stu_data中.通常默认导入时会出现中文乱码,修改my.ini文件default-character-set=utf8,也不能解决问题-- 正确解决办法: a.数据导出:编码选择utf8 b.数据导入: u stu_data C utf8 . stu_data.sql