手头正在写的程序中有多线程(线程数<10)对数据库(用的jdbc但没用连接池)同时插入记录(每次<2000条),同时隔一段时间还会提取一些记录。
我们用的是固定大小的线程池(newFixedThreadPool),一个任务执行完了就复用一个线程执行另一个任务
因此 代码写成了这样:
final ExecutorService Gathers = Executors.newFixedThreadPool(gatherNum);
while(true)
{
Gathers.execute(new Gather());
}
但是在测试中发现 即使将gatherNum设为1,对执行sql语句的程序做同步化 ,数据插入数据库的速度也很慢 有时1,2秒才插入一个记录
将多线程改为直接由main跑一次任务 记录很快插入数据库
所以很疑惑
PS:执行sql语句的程序每个线程都会new一个 所以本来没想同步 但想问一下 我们对getcon,closestatment等等做了一个简单的包装 ,如果不对getcon作同步话的话 mysql会有什么反应?
分享到:
- 2007-11-03 13:29
- 浏览 5420
- 评论(1)
- 论坛回复 / 浏览 (1 / 6544)
- 查看更多
相关推荐
1. **批处理**: MySQL支持批量插入,即一次提交多个INSERT语句,减少网络通信开销,提高效率。Kettle可以通过增大批处理大小来实现这一点。 2. **索引优化**: 创建合适的索引可以加速查询,尤其是对于写操作,避免...
MySQL作为一种广泛使用的开源关系型数据库管理系统,在很多应用场景中都可能遇到性能瓶颈的问题。常见的性能瓶颈主要分为两大类:**CPU瓶颈**和**I/O瓶颈**。 - **CPU瓶颈**:通常发生在处理大量数据时,尤其是在将...
4. **多线程**:MySQL支持多线程,可以在同一时间处理多个请求,提高并发性能。 5. **网络支持**:作为服务器,MySQL可以跨网络运行,支持TCP/IP、Unix套接字等多种通信协议。 Boost库: 1. **C++库**:Boost是一个...
- **多线程SQL服务器**:能够高效处理多个并发连接请求。 - **客户端支持**:支持多种客户端程序和库,便于不同平台上的应用开发。 - **后端支持**:提供多种后端处理方式,适应不同的应用场景需求。 - **API和...
当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用, # 然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在...
`MySQL数据库ini文件详解.txt`这个文档很可能会详细阐述每个配置项的作用,包括如何调整以优化性能、安全性和可用性。例如,它可能会讨论如何通过调整`query_cache_size`来改善查询缓存,或者如何通过`thread_cache_...
1.1.10 提高默认innodb线程并发数 21 1.1.11 预读算法的变化 22 1.1.12 首次在linux上实现了异步i/o 23 1.1.13 恢复组提交 24 1.1.14 innodb使用多个回滚段提升性能 26 1.1.15 改善清除程序进度 26 .1.1.16 ...
2. MySQL Sending data 导致查询很慢 当查询涉及大量数据传输时,`Sending data`状态可能持续很长时间。这通常是因为没有有效的索引或查询优化。检查查询语句,确保正确使用了WHERE条件,并考虑添加合适的索引来加快...
### MySQL性能优化与诊断 #### 一、MySQL存储引擎对比:MyISAM vs InnoDB 在MySQL中,MyISAM和InnoDB是最常用的两种存储引擎。对于不同的应用场景,选择合适的存储引擎至关重要。以下是对这两种存储引擎的主要特点...
MySQL面试题汇总文档主要涵盖了一系列关于MySQL的重要知识点,对于准备MySQL面试的人员来说具有很高的参考价值。以下是这些知识点的详细说明: 1. **MySQL复制原理**:MySQL的复制流程包括三个主要线程。主服务器上...
14. **max_connections**:虽然文件中未提及,但这个参数也很重要,它定义了MySQL服务器允许的最大并发连接数。 15. **tmp_table_size**和**max_heap_table_size**:这两个参数决定了内存中临时表的最大大小,对...
* 在很多线程请求不同记录时减少冲突锁。 * 事务回滚时减少改变数据。 * 使长时间对单独的一行记录加锁成为可能。 行级锁的缺点有: * 比页级锁和表级锁消耗更多的内存。 * 当在大量表中使用时,比页级锁和表级锁...
表级锁和行级锁或页级锁的差异还体现在支持并发插入等高级功能上,允许基于访问数据的时间点提供不同的数据视图。 在实际应用中,选择合适的锁定级别取决于具体的工作负载和性能要求。正确地使用锁定策略可以显著...
在MySQL中,单进程复制意味着从库的复制是单线程进行的,当涉及到大量的写操作时,很容易出现复制线程被某个或某几个表的高并发写操作所占满,导致复制延迟。在本案例中,单表的大量删除和插入操作造成了复制线程的...
7. 线程安全的数据结构:在多线程环境中,如并发编程,线程安全的数据结构能确保正确性和一致性。 8. 数据结构优化:如使用位运算优化、压缩存储、自平衡二叉搜索树(如AVL树和红黑树)等。 9. 复杂度分析:理解...
- MySQL有多个IO线程,如插入缓冲线程、日志线程和读写线程,它们分别处理不同的I/O请求。监控线程状态并进行优化,比如调整线程数量或优化线程调度,可以减少等待时间和提高并发性能。 4. **日志系统** - Redo ...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,其性能和稳定性很大程度上取决于正确的配置。本文将深入探讨MySQL的一些关键启动参数及其优化方法,以帮助提升数据库的效率和响应速度。 首先,`back_log`参数...
- **Parallel Collector**:多线程的垃圾回收器,适用于需要较高吞吐量的应用。 - **CMS Collector**:并发标记-清扫垃圾回收器,注重缩短暂停时间,适用于用户界面对响应时间有较高要求的应用。 - **G1 Collector**...
- **Parallel Collector**:多线程收集器,适用于服务器端应用。 - **CMS Collector**:并发标记-清除算法,适用于响应时间敏感的应用。 - **G1 Collector**:分代收集算法,适用于大内存应用。 #### Java并发 ...
14. **多线程**:如果系统需要同时处理多个任务,如在查询数据库的同时更新UI,多线程编程就显得很重要。Java提供了Thread类和Runnable接口来实现并发执行。 15. **测试**:单元测试和集成测试对于确保代码质量至关...