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-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required.数据库没问题,每次查询完执行:if(rs!=null){try {rs.close();} catch (Exception e) {// TODO: handle exception}}//关闭资源[先开后闭];if(ps!=null){try {ps.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}ps=null;//使用垃圾回收.}if(ct!=null){try {ct.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}ct=null;}在一个方法里有个循环要反复去查询数据库,每次都是调用工具类去查询,也就是每次都执行了上面的关闭。可当查询到4000次左右时就抛出了上面的异常。请帮忙看看,万分感谢! 问题补充:asd576926596 写道

解决方案

这个问题很简单,你加个连接缓冲池就OK了。因为你写了连接关闭,但是数据库连接没有立马关闭,需要等待一小段时间才会关闭。
解决方案二:
引用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. 这个很明显就是说,你连接数量已经超过了。。。。如果你想再连接,你可以通过改配置文件加大数量。楼主,你是否有关闭 Connection?是否有关闭Statment?
解决方案三:
呵呵,耐心读一下所有提示信息,你就会有问题的一个大置方向
解决方案四:
For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required. 这很明显是 linux 服务器的 ulimit 限制住了 ulimit 你把这个参数 加大了 试试 在 /etc/profile 里
解决方案五:
注意下Connection一个connection可以打开多个Statement,但是一个Statment只能打开一个Resultset每次打开的Resultset使用完后记得关闭即可,如果直接关闭Statment,会自动关闭Resultset,关闭以后不用再自动 rs = null;这是完全没有必要的!整体来说,记得关闭Resultset,不要打开太多connection
解决方案六:
把代码贴出来看下啊
解决方案七:
我也遇到这个问题,楼主解决了吗
解决方案八:
我猜测有可能是你没有清空数据库连接池,到第4000次的时候,连接池的链接线程已经满了,所以才连不上。你是不是每次循环都commit一次应该是总体做完操作后再commit会好一些最好把代码贴出来看下

时间: 2024-11-02 09:04:37

mysql查询大量数据异常的相关文章

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

问题描述 如何解决mysql查询百万数据时出现大量sleep的进程 如何解决mysql查询百万数据时出现大量sleep的进程: 当使用jdbc 查询数据量为100多万的数据时,mysql会出现大量sleep的进程,然后程序便会卡死在那儿 解决方案 描述的有点泛泛,如果能把使用场景.涉及库表定义发一下会更容易分析. 大量sleep进程可能并不是问题,因为如果使用到连接池的话,一开始就是初始化一些连接,这些连接没有使用的话,在mysql看可能就是sleep的. 从你描述,感觉"查询数据量为100多万

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

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

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 =

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 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 本章节我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据.防止表中出现重复数据 你可以在MySQL数据表中设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性. 让我们尝试一个实例:下表中无索引及主键,所以该表允许出现多条重复记录. CREATE TABLE person_tbl ( first_name CHA

mysql 查询结果异常分析

title: MySQL · mysql · mysql 查询结果异常分析 author: 张远 现象 查询条件类型变化后,查询出了不正确的结果. create table t1(id int primary key, a varchar(50) DEFAULT NULL, key idx_a(a)) engine=innodb; show create table t1; insert into t1 values(1,'6036000240201612190005565273'); inse

MySQL将表a中查询的数据插入到表b中

 MySQL将表a中查询的数据插入到表b中 如果表b存在 1 <code class="sql"><code class="sql"><code class="sql">insert into b select * from a;</code></code></code> 如果表b不存在 1 <code class="sql"><code

mysql查询随机几条数据

MySql查询随机几条数据 想到了 Max RAND 这几个函数 用以下2种办法都可以实现查询. 速度还行. 几十万数据左右, 没有什么问题. SELECT * FROM `news` WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `news`))) LIMIT 10; SELECT * FROM `news` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `new