高并发下MySQL数据库的优化
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结束语
• 一般系统级优化到有限的
– 优化目的是发挥硬件潜能 – 但受硬件限制 – 或受到操作系统内核限制
• 应用级优化才是真正的王道
– – – – – 通过select语句优化 通过调整业务策略较少连接数 或分解慢查询,提高执行效率 包括分解逻辑降低DB使用率等待 这些都可以从根本上解决DB高并发问。
网卡
Biblioteka Baidu
一般不会出问题,因为网卡流量跑满前其他硬件已经无法支持了
服务器之磁盘相关
• 磁盘IO 读写压力
– 如:社区类增,删,改操作频繁 – 读写分离 – 调整磁盘子系统参数(提高读写频率)
• • • • /proc/sys/vm/dirty_ratio /proc/sys/vm/dirty_background_ratio /proc/sys/vm/dirty_writeback_centisecs /proc/sys/vm/dirty_expire_centisecs(5秒-2秒)
• 数据库自身指标
– 并发数 (mysqladmin status) – 慢查询数(同上)
硬件之间的相互影响
状态 受影响硬件 原因 导致结果
磁盘I/O
使用率高
cpu高
频繁读写
load高
cpu
使用率高
无
慢查询,跨表统计等
系统变慢,load升高
内存
占用swap分区
cpu高
大量的临时表空间占用
系统变慢或崩溃,load升高
– 修改文件系统(ext3-XFS)
服务器之磁盘
• 修改文件系统( 巨大反差)
服务器之内存、cpu
• 内存成为系统高负载原因
– 内存耗尽
• Mysql占用swap分区 • 服务器其他程序挤占内存
• Cpu成为高负载瓶颈原因
– 慢查询 – 频繁的锁表操作
MySQL配置优化之连接数
• 连接数过多处理办法
– 读、写、索引、查询、排序、临时表、关键字 等待。。。
• • • • • • • • • • • • • • • • • • • • • • •
真实的并发处理数 thread_concurrency = 8 服务器cpu内核数 各种缓存大小 key_buffer = 384M 索引块缓存 max_allowed_packet = 1M table_cache = 2048 所有线程打开表的数量 sort_buffer_size = 2M 对排列缓存 read_buffer_size = 2M 读缓存 read_rnd_buffer_size = 8M 随即读排序缓存 myisam_sort_buffer_size = 64M 排序MyISAM索引分配的缓冲区 thread_cache_size = 8 可以复用的保存在缓存中的线程的数量 query_cache_size = 32M 查询缓存 tmp_table_size = 256M 临时表大小 max_heap_table_size = 256M 内存表大小 延时等待 interactive_timeout=2880000 对后续起的交互链接有效; wait_timeout=2880000 对当前交互链接有效; 连接数 max_connections= 3000 最大并发数 max_connect_errors = 6000 back_log=500 堆栈队列大小 域名相关 skip-name-resolve 跳过反响解析
– 提高mysql连接数阀值 – 降低前台与DB的连接次数 – 减少慢查询数,提高响应时间 – 减少或合并锁表操作,提高响应时间 – 分表分库 – 分服务器 – 主从结构,集群。。。
Mysql之配置优化
• 中心工作调节各种类型缓存大小 • 缓存过小,会降低命中,导致直接表操作 增加,影响性能。 • 缓存过多,增加内存开销 • 缓存类型
高负载下MySQL数据库的优化
金凯声 2009-12-24
优化重点
• 运维角度优化 • 硬件优化
– 升级硬件 – 优化硬件驱动配置
• Mysql优化
– 配置优化 – 编译参数优化 – 部署方案优化
• 系统及应用级优化更有效
高负载判断
• 硬件相关
– 服务器系统Load超过经验阀值(top) – 查看磁盘IO,繁忙引发cpu高占用(iostat ) – 查看服务器连接数超过预设值 (netstat)