首页 > 数据库 >mysql数据库性能优化参考

mysql数据库性能优化参考

时间:2023-09-01 12:16:09浏览次数:47  
标签:profile show -- 数据库 参考 连接数 并发 mysql query

原文链接:https://blog.csdn.net/qq_34777982/article/details/125788079

硬件和操作系统层面的优化
硬件: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

标签:profile,show,--,数据库,参考,连接数,并发,mysql,query
From: https://www.cnblogs.com/beatle-go/p/17671503.html

相关文章

  • Navicat中怎么查看数据库密码
    https://blog.csdn.net/qq_35868412/article/details/110694727?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%A6%82%E4%BD%95%E6%9F%A5%E7%9C%8B%E8%87%AA%E5%B7%B1%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AF%86%E7%A0%81&utm_medium=distribut......
  • mysql备份恢复
    备份某个表:mysqldump-uusername-ppassworddatabase_nametable_name>backup_file.sql备份多个表:mysqldump–uusername-ppassworddatabase_nametable1table2>BackupName.sql备份整个库:mysqldump-uusername-ppassworddatabase_name>backup_file.sql备份多......
  • 【故障公告】一而再,再而三,三翻四复:数据库服务器 CPU 100%
    会员救园,故障捣乱,每当困难时,故障们总是喜欢雪上加霜过来考验你。今天下班前17:43~17:47期间,园子的SQLServer数据库服务器突然出现CPU100%问题。发现问题后,我们立即火速赶往阿里云RDS控制台,重启了实例,重启后很快恢复正常。快到19点的时候,正当我们准备发布“一而再,再而三......
  • 释放多云应用价值,天翼云打造一站式数据库多云管理平台
    近年来,各行业上云提速,企业使用多云已经成为新常态。中国信通院发布的《多云数据存储白皮书(2023)》显示,在国内,已经有近九成企业选择多云架构。与此同时,多云部署也衍生出跨云管理难、数据治理难、数据安全保护难等挑战。数据库产品作为云服务中数据管理的关键一环,对多云部署同样提出......
  • Mysql主从复制(一主一从)+Mycat(windows-1.X版本)实现读写分离
    项目中,如果数据量大的情况下,可以使用【数据库主从复制+读写分离】的方式优化,其他方式也很多,这里只记录下这种方式一、说明1.需要的环境等:序号环境说明1mysql5.7服务器两台数据库服务器,一台作为主数据库,一台作为从数据库2jdk安装mycat的时候会用到jdk3my......
  • 读写分离---mysql的主主结构和主从架构
    前言:为什么要对mysql做优化?  因为数据都来源于数据库,如果数据库慢了,无论是多线程、各种识别模式优化还是很慢,因为查sql就很慢。  官方说法:单表2000万数据,增删改查就到达瓶颈了。所以为了保证查询效率,得让每张表的大小得到控制。 Mysql架构:实际生产过程中,查询业务......
  • BUUCTF [GWCTF 2019]我有一个数据库
    文件包含漏洞,和SQL注入等攻击方式一样,文件包含漏洞也是一种注入型漏洞,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。什么叫包含呢?以PHP为例,我们常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程叫做包含。有时......
  • baomidou动态数据库@DS
     全链路不能使用@TransactionalpublicinterfaceXXXBasicMapper{@DS("operating")List<XXXBasicVo>findBasicList(XXXBasicPageDtodto);@Service@DS("operating")publicclassXXXXXXBasicServiceImpl2implementsIXXXBasicService......
  • unistr函数将数据库表中的unicode转为字符(\u2161转为罗马数字Ⅱ)
    一、背景在前端页面用户输入罗马数字Ⅱ时,数据存到数据库会转为Unicode编码\u2161,需通过函数重新将Unicode编码转换回去。二、uninstr函数unistr(\xxxx)将Unicode编码转换回原来的形式,因为Unicode是带有u的,即\uxxxx,需要将u给去掉,变成oracle可识别的格式,否则oracle会提示错误。......
  • 数据库知识库
    Oracle数据库知识库查看是否有表被锁住:select*fromv$locked_object;查看详细的信息:selectsess.sid,sess.serial#,lo.oracle_username,lo.os_user_name,ao.object_name,lo.locked_modefromv$locked_objectlo,dba_objectsao,v$sessionsess,v$processpwherea......