1、使用行级别锁,避免表级别或页级别锁尽量使用支持行级别锁的存储引擎,如innodb;只在读操作显著多于写作的场景中(如数据仓库类的应用)使用表级别锁的存储引
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支持多线程复制(每库一个复制线程);
本文出自 “马哥教育” 博客,转载请与作者联系!