SQL 数据库连续插入大批量数据时超时

经常会处理大批量千万级的数据,一直以来都没问题。最近在处理时确出来了经常超时,程序跑一段时间就得停下来重启服务器,根据几次的调整发现了问题的所在,产生这类问题主要是以下几点所导致:

1、数据库连接未关闭,大量操作数据库时,连接未关闭的话,会导致连接过多数据库卡死。

2、检查数据库的超时时间设置过短。

3、索引:数据库操作期间太多的索引导致产生很多碎片,清理和重新组织了下索引 。

4、日志文件过大数据的操作时处理日志超时导致,删除或是压缩日志,把日志文件的增长降低。

现在这种问题基本上是第3、4两种可能性比较大,但也不排除新手写程序时会出现第1种情况。

这两天程序经常卡死一步步查找过来发现了最终问题所在,出的是第4种错误,其中也重新组织过索引,确实起到不小的作用,程序运行起来会快很多,但是时间长了还是会卡死,因此后来经查看日志以及压缩后该问题彻底解决。

时间: 2024-10-10 19:55:19

SQL 数据库连续插入大批量数据时超时的相关文章

mysql/mariadb数据库在插入表数据时,ID竟然成奇数增加了?看完下面内容就知道怎么处理了。

今天突然被问到一个问题,mysql数据库插入表数据时,设置了ID自增,但是插入数据后,ID却呈奇数增加,不是123456类型,而是13579形式,突然有点懵,研究了一会,发现是auto_increment步长的问题,下面就具体来说下怎么解决: 插入数据后发生表内ID按奇数增加,如下图: 查看自增步长:show variables like 'auto_increment%'; 将自增步长改为1:set @@auto_increment_increment=1; 此时用truncate清空表数据重

iOS学习之sqlite的创建数据库,表,插入查看数据

目录(?)[-] 新建项目sqliteDemo添加使用sqlite的库libsqlite3dylib sqlite 的方法 获取沙盒目录并创建或打开数据库 创建数据表 插入数据 查询数据库并打印数据 iOS sqlite数据库操作.步骤是: 先加入sqlite开发库libsqlite3.dylib, 新建或打开数据库, 创建数据表, 插入数据, 查询数据并打印 1.新建项目sqliteDemo,添加使用sqlite的库libsqlite3.dylib 2.sqlite 的方法 sqlite3  

删除大批量数据时总结

错误做法: 做法1:查询出所有满足条件的list列表集合,然后遍历list集合,单个删除库中的对象. 正确做法: 做法2:直接用hql语句或者sql语句执行满足条件的删除操作. 原因: 删除小数据量时,第一种做法没有影响. 但是删除大批量数据时,数据库会报错.因为数据库没有那么多的连接数.

oracle插入字符串数据时,字符串中有'单引号

使用insert into(field1,field2...) values('val1','val2'...)时,若值中有单引号时会报错. 处理方法:判断一下val1,val2中是否含有单引号,若含单引号,则将单引号'替换成两个单引号''. 将字段与字段值组织到一个HashTable中,再抽象出一个组织sql语句的函数getSqlByHashTable(): HashTable ht =new HashTable(); ht.add(field1,val1); ht.add(field2,va

SQL数据库同步工具(开辟数据同步工具)2.0 中文免费版

SQL数据库同步工具(开辟数据同步工具)本系统分为客户端和服务器两个部分,其中客户端承担了系统绝大数事务,服务器只是简单的执行客户端传送的命令,属于典型的C/S胖客户端瘦服务器模式.这样设计的目的是为了减轻服务器的压力,让系统更加流畅. 本系统分为客户端和服务器两个部分,其中客户端承担了系统绝大数事务,服务器只是简单的执行客户端传送的命令,属于典型的C/S胖客户端瘦服务器模式.这样设计的目的是为了减轻服务器的压力,让系统更加流畅. 客户端负责采集分布数据库中的数据,然后汇总到服务器.客户端需要配

mysql导入大批量数据时,出现ERROR : (2006, 'MySQL server has gone away')

mysql导入数据时,出现ERROR : (2006, 'MySQL server has gone away') 解决方案:官方解释是适当增大 max_allowed_packet 参数可以使client端到server端传递大数据时,系统能够分配更多的扩展内存来处理. 设置 max_allowed_packet = 256M (1024*1024*256) set global max_allowed_packet=268435456; 使用set global命令修改 max_allowe

SQL中使用UPDATE更新数据时一定要记得WHERE子句

我们在使用 SQL 中的 UPDATE 更新数据时,一般都不会更新表中的左右数据,所以我们更新的数据的 SQL 语句中会带有 WHERE 子句,如果没有WHERE子句,就回更新表中所有的数据,在 mysql 中,我们可以设置sql_safe_updates 这个自带的参数来解决,,当该参数开启的情况下,我们必须在 UPDATE 语句后携带 WHERE 条件,否则就会报错.set sql_safe_updates=1; 表示开启该参数.下面是开启sql_safe_updates参数后不带  WHE

【转】 iOS学习之sqlite的创建数据库,表,插入查看数据

原文:  http://blog.csdn.net/totogo2010/article/details/7702207 iOS sqlite数据库操作.步骤是: 先加入sqlite开发库libsqlite3.dylib, 新建或打开数据库, 创建数据表, 插入数据, 查询数据并打印 1.新建项目sqliteDemo,添加使用sqlite的库libsqlite3.dylib 2.sqlite 的方法 sqlite3          *db, 数据库句柄,跟文件句柄FILE很类似 sqlite3

SQL数据库查询一列数据返回一行

SQL:数据库合并列数据:遇到一个更新的问题 想要把查询到的数据某一列拼接成字符串形式返回用的是SQL数据库中的STUFF函数比如 查询到的表(u_College)如下Id Name Age Classify1 张一 18 一班2 张二 17 二班3 张三 19 三班->SQL语句SELECT distinct Classify=STUFF((SELECT distinct ','+ Classify FROM u_College FOR XML PATH('')),1,1,'') FROM u