mysql 提高update性能_如何提高MySQL INSERT和UPDATE的性能?

本文探讨了提高MySQL INSERT和UPDATE性能的各种方法,包括检查硬件和操作系统的配置,如CPU、IO、内存和交换使用情况。此外,文章建议优化磁盘、RAID、LVM设置,选择合适的IO调度程序和文件系统。针对MySQL实例,应适当调整缓冲池大小、日志文件大小和innodb_flush_log_at_trx_commit等参数。通过分析工作负载、使用慢查询日志和EXPLAIN来改进查询性能,以及创建和利用索引。最后,文章分享了一个具体的案例,展示了一个通过创建合适索引将长时间更新查询优化至毫秒级的例子。
摘要由CSDN通过智能技术生成

>检查您的硬件和操作系统是否已正确配置和调整:

>问题来源(CPU / IO /内存/交换使用).你有很多眼压吗? CPU是否已加载?如果你有很多阅读IOP可能你没有足够大的InnoDB buffer_pool.如果加载了CPU,则可能是查询执行全表扫描而不是使用正确的索引.

>磁盘/ RAID / LVM设置.在某些特定设置中,LVM striping可以通过均衡磁盘负载(无硬件RAID,连接多个LUN)为您带来好处

> IO调度程序:当你拥有良好的硬件RAID控制器时,可能noop是最好的. RedHat made some tests和他们说,对于Oracle(和其他DB)CFQ是最好的选择.您需要运行一些基准测试(如tpc-c或tpc-e)并选择最适合您硬件的基准测试.

>好的文件系统 – ext3在数据库特定的工作负载中表现不佳.更好的是XFS或OCFS2.你需要再做一些基准测试.

>观察,如果您的系统使用交换. Using swap degrades mysql performance.

>检查您的MySQL / InnoDB实例是否已正确调整:

>缓冲池大小 – 缓存内存中的数据页

> innodb_flush_method = O_DIRECT – 避免双IO缓冲

>增加InnoDB日志文件大小 – 对于写密集型工作负载,这可以提高性能.但请记住:更大的日志文件大小意味着更长的崩溃恢复有时在几个小时!

> innodb_flush_log_at_trx_commit = 0或2 – 如果您不关心ACID并且可能会在最后一两秒内丢失交易.

> key_buffer_size – 对MyISAM非常重要,但它用于磁盘临时表.

>观看你的INNODB STATUS

>分析您的工作负载 – 将所有查询捕获到slowquery日志并在其上运行mk-query-digest.您可以使用tcpdump and maatkit捕获所有查询

>您的大部分服务器时间需要哪些查询?

>是否创建了临时表,尤其是大型临时表?

> Learn, how to use explain

>您的申请是否使用交易?当您使用autocommit = 1(默认为MySQL)运行查询时,每个插入/更新查询都会开始新事务,这会产生一些开销.如果可能,最好禁用自动提交(默认情况下禁用python MySQL驱动程序自动提交)并在完成所有修改后手动执行提交.

>您的应用程序是否在循环中对同一个表进行一系列插入?对于一系列插入,加载数据infile命令要快得多.

>记住:从表中选择count(*);对于innodb比对myisam要慢得多.

>什么类型的INSERT / UPDATE查询占用大部分服务器时间?他们如何优化?

>检查,如果您的数据库具有正确的索引并根据需要添加它们.

In our environment we had situation,

that one type of update queries was

slow. Estimated time to finish batch

job was 2 days!!! After analyzing

slowquery log we find, that this type

of update query needs 4 seconds to

complete. Query looked like this:

update table1 set field1=value1 where

table1.field2=xx table2.field3=yy and

table2.field4=zz. After converting

update query to select query and

running explain on that select query

we find, that this type of query

doesn’t use index. After creating

proper index we had reduced update

query execution time to miliseconds

and whole job finished in less than

two hours.

一些有用的链接:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值