我运行的是 Windows 7(专业版),配有英特尔 Q8400 和 MySQL 5.1。每当我有大量 MySQL 查询(例如插入或更新 10,000-40,000 条记录,这需要几秒钟)时,我的 UI 就会时断时续、冻结。应用程序通常反应灵敏(不会冻结),但在 SQL 查询完成之前,它们不会做太多事情。
在 CPU 使用率方面,MySQL 占用了四个处理器中的一个(任务管理器中为 25%);另外三个未被使用。
我该怎么做才能提高性能?这些查询有时会运行几分钟,所以这是一个相当大的麻烦。
编辑:我有一台 SATA HD(三星 HD502HJ)
答案1
这很可能是由于 I/O 瓶颈造成的。我假设您使用的是单个硬盘或简单的镜像。如果是这两种情况,则说明您没有安装磁盘子系统来提供足够的吞吐量来支持如此大的查询,而不会中断系统上运行的其他程序。
基本上,除非你想投资购买更多硬盘和一个好的 RAID 控制器,否则你只能忍受它。在现代机器中,大量读取/写入通常总是受磁盘限制,而不是受 CPU 限制。
编辑:根据你之前对 OP 的评论,使用单个硬盘你对此无能为力。大多数处理大型 SQL 查询的服务器都有 6-8 个硬盘。最佳实践要求你至少有三组物理上独立的硬盘。一组用于操作系统、交换和应用程序,第二组用于数据库,第三组用于事务日志。这可以防止在同一卷上发生单个提交的多次写入。
基本上,如果您想在桌面而不是服务器上运行 MySQL 并执行大量查询,那么无论进行多少调整都无法缓解这个瓶颈。
答案2
为了充分利用多处理器,您应该能够创建一个应用程序来拆分 SQL 语句并将工作分散到多个线程中。这将允许以 4 倍的速度插入查询。