数据库性能优化

硬件和操作系统层面的优化 硬件:cpu、内存、磁盘io、网络带宽 操作系统: 应用文件句柄(ulimit -a open files) 网络配置 架构设计层面的优化 集群方式(主从集群或者主主集群):避免单点故障 读写分离:读写分开,将压力分担,避免读写冲突,提高性能 分库分表:分库降低单一服务器的IO压力;分表降低单表数据量,提升sql查询效率 分布式数据库:针对热点数据,使用redis、mongodb等降低直接查询mysql的压力,提升数据检索性能 数据库配置优化 存储引擎的选择:http://c.biancheng.net/view/7185.html 最大连接数:max_connections 默认151 上限16384 建议值:实际连接数是最大连接数的85%较为合适 binlog日志开启:log_bin binlog日志格式:binlog_format=row 连接超时时间:wait-timeout=600 默认8小时 并发线程数:innodb_thread_concurrency 默认0无限制 建议值:设置为cpu核心数的两倍 请求堆栈:back_log 默认50 建议值:设置为最大并发连接数的20%~30% 缓存池配置:innodb_buffer_pool_size 建议值:主机内存的70%~80%

参考资料: https://wenku.baidu.com/view/ebaefb0513a6f524ccbff121dd36a32d7375c733.html

关于配置项的修改,需要关注两个层面,第一个是配置的作用域,它可以分为会话级别和全局范围。第二个是是否支持热加载,针对这两个点,我们需要注意的是,全局参数的设定,对于已经存在的会话是无法生效的,会话参数的设定,随着会话的销毁而失效。第三个是全局类的统一配置,建议配置在默认配置文件中,否则重启服务会导致配置失效。

SQL执行优化 慢sql定位和排查:慢查询日志、慢查询日志分析工具 >> 获取到慢sql 执行计划分析:关键字explain,重点关注type,key,rows,filterd等字段,从而去定位该SQL执行慢的根本原因,再去有的放矢的进行优化。 show profile工具:MySQL提供的可以用来分析当前会话中SQL语句资源消耗情况的工具,可以用于SQL调优的测量,在当前会话中,默认情况下,show profile是关闭状态,打开以后会保存,最近15次的运行结果,针对运行慢的SQL通过profile工具进行详细分析,可以得到SQL执行过程中所有资源的开销情况,比如io开销,cpu开销,内存开销。

示例:

-- 查看当前是否开启此功能

show variables like '%profiling%';

-- 开启

set profiling=1;

-- 查看具体执行时间

show profiles;

-- 查看详细的每个步骤时间

show profile for query 1;

-- 显示所有性能信息

show profile all for query n

-- block io:显示块IO操作次数

show profile block io for query n

-- context switches:显示上下文切换次数,被动和主动

show profile context switches for query n

-- cpu:显示用户cpu时间、系统cpu时间

show profile cpu for query n

-- IPC:显示发送和接受的消息数量

show profile ipc for query n

-- page faults:显示页错误数量

show profile page faults for query n

-- source:显示源码中的函数名称与位置

show profile source for query n

-- swaps:显示swap的次数

show profile swaps for query n

sql优化规则:

SQL的查询一定要基于索引来进行数据扫描。避免索引列上使用函数或者运算符。Where字句中like%号尽量放置在右边。使用索引扫描,联合索引中的列从左往后,命中越多越好尽可能使用SQL语句用到的索引完成排序查询有效的列信息即可,少用*代替列信息永远要用小的结果集驱动大的结果集

数据库性能测试

(1)sysbench sysbench支持以下几种测试模式:

CPU运算性能磁盘IO性能调度程序性能内存分配及传输速度POSIX线程性能数据库性能(OLTP基准测试)

(2) mysql自带基准测试工具mysqlslap

(3) ab性能压测

说明: 性能测试中关注的指标:

吞吐率(Requests per second) 服务器并发处理能力的量化描述,单位是reqs/s,指的是在某个并发用户数下单位时间内处理的请求 数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。吞吐率是基于并发用户数的。 计算公式:总请求数/处理完成这些请求数所花费的时间,即 Request per second=Complete requests/Time taken for tests 必须要说明的是,这个数值表示当前机器的整体性能,值越大越好。 并发连接数(The number of concurrent connections) 并发连接数指的是某个时刻服务器所接受的请求数目 并发用户数(Concurrency Level) 要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。 用户平均请求等待时间(Time per request) 计算公式:处理完成所有请求数所花费的时间/(总请求数/并发用户数),即: editor Time per request=Time taken for tests/(Complete requests/Concurrency Level) 服务器平均请求等待时间(Time per request:across all concurrent requests) 计算公式:处理完成所有请求数所花费的时间/总请求数,即: Tim taken for/testsComplete requests 可以看到,它是吞吐率的倒数。同时,它也等于用户平均请求等待时间/并发用户数,即 Time per request/Concurrency Level

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: