文档章节

MySQL性能优化之一:提高MySQL并发能力的思路

马哥linux运维
 马哥linux运维
发布于 2016/01/11 21:39
字数 615
阅读 18
收藏 0

1、使用行级别锁,避免表级别或页级别锁

尽量使用支持行级别锁的存储引擎,如InnoDB;只在读操作显著多于写作的场景中(如数据仓库类的应用)使用表级别锁的存储引擎,如MyISAM;。

 

2、降低热巨锁(hot gaint lock)出现的可能性以尽可能避免全局互斥量

 

临界区(仅允许单一线程访问的资源)会严重降低MySQL系统并发性;InnoDB缓冲池(buffer pool)、数据字典等都是常见的临界区;幸运的是,新版本的InnoDB已经能够较好的运行于多核处理器,支持使用innodb_buffer_pool_instances服务器变量建立多个缓冲池实例,每个缓冲池实例分别自我管理空闲列表、列表刷写、LRU以及其它跟缓冲池相关的数据结构,并通过各自的互斥锁进行保护。

3、并行运行多个I/O线程

 

通过innodb_io_capacity服务器变量等增加磁盘I/O线程的数量可以提高前端操作(如SELECT)的性能,不过,磁盘I/O线程的数量不应该超过磁盘的IOPS(7200RPM的单块硬件的IOPS数量一般为100个左右)。

 

此外,异步I/O也可以在一定程度上提高系统的并发能力,在Linux系统上,可以通过将MySQL的服务器变量innodb_use_native_aio的值设定为ON设定InnoDB可以使用Linux的异步I/O子系统。

4、并行后端任务

 

默认情况下,MySQL的清写(purge)操作(用于移除带删除标记的记录)由InnoDB的主线程完成,这可以降低内部资源竞争发生的概率,进而增强MySQL服务伸缩能力。不过,随着InnoDB内部各式各样的竞争越来越多,这种设置带来的性能优势已几乎不值一提,因此,生产环境中应该通过为innodb_purge_threads服务器变量设定为ON将主线程与清写线程分开运行。

5、单线程复制模型中的SQL线程是一个热区

 

在从服务器上并行运行多个SQL线程可有效提高MySQL从服务器性能,MySQL 5.6支持多线程复制(每库一个复制线程);

本文出自 “马哥Linux培训” 博客,转载请与作者联系!

© 著作权归作者所有

马哥linux运维
粉丝 21
博文 57
码字总数 102602
作品 0
CEO
私信 提问

暂无文章

Knative 初体验:Eventing Hello World

作者 | 阿里云智能事业群高级开发工程师 元毅 基于事件驱动是Serveless的核心功能之一,通过事件驱动服务,满足了用户按需付费(Pay-as-you-go)的需求。在之前的文章中我们介绍过 Knative ...

zhaowei121
27分钟前
2
0
利用AJAX向后台servlet传JSON数据,后台利用fastjson进行解析

一,json的构建 JSON的格式分为两种,第一种类似于JavaScript中的对象(这里需要注意的是JS中的对象与java中的对象概念是不一样的,js可以在对象中定义属性,方法等,类似于java中的类,但是...

我叫小糖主
29分钟前
1
0
Adobe开发出一个反修图工具 还原人像PS 痕迹

“这是一个假人,但在网路上有多少自拍可以代表真人?”一些读者在虚拟偶像的讨论下评论了这篇文章。 事实上,在上传照片先进行修图似乎是一种新的“社交礼仪”,并且越来越难以区分真假内容...

wowloop
32分钟前
5
0
壮丽70年·奋斗新时代|蒸妙中药熏蒸和汗蒸的区别

桑拿、汗蒸、熏蒸相信这些在日常生活中都常能听到,如今现代人的生活和工作压力越来越大,很多人的身体早已吃不消了,一些人就会选择汗蒸或者熏蒸来放松身体。 汗蒸是一种休闲全新的养生方式...

公益传承
32分钟前
0
0
setSystemUiVisibility方法和getSystemUiVisibility方法

这两个方法的调用方式如下: getActivity().getWindow().getDecorView().setSystemUiVisibility; getActivity().getWindow().getDecorView().getSystemUiVisibility; 参考资料: http://blo......

天王盖地虎626
37分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部