影响mysql性能问题的因素与Linuxmysql查询命令

it2024-03-27  50

MySQL性能问题

一、性能因素影响性能问题 二、虚拟机配置2.1 虚拟机黑屏2.2 虚拟机网络连接不上2.3 配置IP2.4 Xshell连接2.5 虚拟机安装jdk 三、Linux查询命令3.1 ps命令3.2 top命令3.3 vmstat命令 四、Linux管道机制五、mysql性能查询命令

一、性能因素影响

性能问题

性能问题: 硬件层面: CPU、内存、硬盘、网络、I/O、显卡 软件层面: 产品原因: 代码、SQL、算法 其他软件原因: 数据库、中间件、操作系统 意识层面: 测试人员、一线人员、代码实现、产品经理、需求设计 业务层面: 实施方案、业务流程重组、需求定位 商业需求: 案例: 要求:论坛项目中去统计帖子数量 附加要求:实时更新 操作:在mysql中 -- select count(*) from '文章表'; 分析:在论坛中,数据量大可能会达到千万级,innodb存储引擎顶不住 每次帖子/文章发布的时候,在统计表中结果+1,所以需要改变要求 实时更新 =》延迟更新(一天)改为定时任务 给innodb加上where条件 数据表设计: innodb存储引擎是全表扫描,myisam存储引擎有计数器所以查询快 尽量不要有太大的字段,尽量要小 系统架构: 技术选型 -- 缓存 数据的存储 -- 超文本数据、二进制多媒体文件(图片,视频,音频等)varchar字段来存储路径 影响: 硬件 > 业务 > 数据库设计与sql(代码) 问题: 对于用户来说,响应时间10s,1分钟(时间过长,死机) 对于程序员来说:一个程序执行时间太长 性能优化的目的: 对于用户来说:体验好,响应速度快,处理快,结果正确 对于程序员来说:程序执行顺畅 问题原因: 硬件:磁盘(I/O、寻址)、内存、cup等 软件:mysql,算法,代码,程序 业务: 系统架构:事务里面,有很多的数据读写

二、虚拟机配置

2.1 虚拟机黑屏

解决办法: 2.1.1 以管理员身份启动CMD(命令行模式) 2.1.2 重启虚拟机网络 -- netsh winsock reset 2.1.3 重启电脑(虚拟机不要关闭,直接重启)

链接地址

2.2 虚拟机网络连接不上

原因: 虚拟网络的服务没有打开 解决办法: 2.2.1 win+R 输入services.msc -- 打开服务管理 (5个) 2.2.2 把带有 VM 的改成自动 、启动、应用、确定

2.3 配置IP

vi /etc/sysconfig/network-scripts/ifcfg-ens33 ONBOOT=no 改成 ONBOOT=yes ,再回车 写上 ZONE=public IPADDR = 获取IPADDR的值, centos的ip地址 处于起始和结束之间就可以 NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.182.2 网关ip 编辑完成后 按 esc 输入 :wq 保存并退出。 systemctl restart network – 重启 ip addr – 查看虚拟机IP地址

2.4 Xshell连接

点击新增 名称:填写名称(自己随便写) 主机:虚拟机IP地址 点击用户身份验证 : 用户名 虚拟机用户名 密码 虚拟机密码 点击确定 点击接受并保存

2.5 虚拟机安装jdk

tar -zxvf jdk-8u20-linux-x64.tar.gz --解压jdk tar -zxvf 用于解压.tar.gz 后缀结尾的 tar -xvf 用于解压.tar后缀结尾的 mv jdk1.8.0_20 /usr/local/java -- 把解压后的文件移动到/usr/local/java里面去 配置环境变量 vi /etc/profile -- 在文件末尾配置 export JAVA_HOME=/usr/local/java export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar export PATH=$PATH:${JAVA_HOME}/bin 保存并退出 source /etc/profile -- 开启环境变量 java -version -- 查看Java的版本

三、Linux查询命令

3.1 ps命令

a 显示所有进程 -a 显示同一终端下的所有程序 -A 显示所有进程 c 显示进程的真实名称 -N 反向选择 -e 等于“-A” e 显示环境变量 f 显示程序间的关系 -H 显示树状结构 r 显示当前终端的进程 T 显示当前终端的所有程序 u 指定用户的所有进程 -au 显示较详细的资讯 -aux 显示所有包含其他使用者的行程 -C<命令> 列出指定命令的状况 --lines<行数> 每页显示的行数 --width<字符数> 每页显示的字符数 --help 显示帮助信息 --version 显示版本显示 状态 STAT: S:休眠状态 s: 有子进程存在 D:进程不可中断 R:进程正在运行中 T: 进程已经停止了 Z:僵尸进程 W: 内存交换(内核2.6以后就没有了) X: 死掉的进程 <:优先级高 N:优先级低 +:后台运行 在命令中: %CPU 表示cpu(代表每个处理器的整体使用率)的使用率,如果持续一段时间里CPU的使用率大于80%,这就可能表 名CPU出现瓶颈。 %mem 表示内存的占用率 stat中的参数意义: ` D 不可中断 Uninterruptible(usually IO) R 正在运行,或在队列中的进程 S 处于休眠状态T 停止或被追踪 Z 僵尸进程 W 进入内存交换(从内核2.6开始无效) X 死掉的进程 高优先级 n 低优先级 s 包含子进程 常用ps命令: ps -aux -- 主要是查看CPU以及内存使用率 ps -ef |grep mysqld -- 和上一个差不多但没有他详细 kill -9 进程id -- 杀死进程

3.2 top命令

top第一行信息: top - 21:51:44 up 24 min, 2 user, load average: 0.00, 0.01, 0.04 21:51:44 表示系统运行的当前时间 up 24 min 表示系统运行时间 2 user 表示登录用户的数量。 load average: 0.00, 0.01, 0.04 表示系统负载,既任务队列的平均长度,三个数值分别1分钟,5分钟,15分钟 到现在的平均值。

第2,3行两汉分别表示进程和CPU的性能的一些信息 Task: 103 total, 1 running, 102 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 统计信息的含义: Tasks: 101 total 表示进程总数 1 running 正在运行的进程数量 100 sleeping 睡眠的进程数量 0 stopped 停止的进程数量 0 zombie 表示僵尸进程数量 0.0 us 表示用户空间占用CPU的百分比(如果用户时间值很高,表明系统正在执行实际的工作) 0.0 sy(表示内核空间占用CPU的百分比,包括终端,(系统时间值持续很高表名网络或驱动器堆栈可能存在瓶颈。通 常 ,系统只会花费很少时间在内核时间 上) 0.0 ni 表示用户进程空间改变过优先级的进程占用CPU的百分比 100.0 id 表示空闲cpu(这个值越大表明系统CPU的负荷越小) 0.0 wa I/O等待 表示等待输入输出的cpu(等待I/O操作所需要的CPU时间总合,系统不应该花费过多的时间等待I/O 操作,否则你应该检查一下I/O子系统各方面的性能) top 显示出现的每个列的含义分别为: PID: 进程描述符 USER: 进程的拥有者 PRI:进程的优先级 NI: nice level SIZE: 进程拥有的内存(包括code segment + data segment + stack segment) RSS: 物理内存使用 VIRT(virtul memory usage): 进程需要的虚拟内存大小 RES(resident memory usage): 常驻内存 SHARE: 和其他进程共享的物理内存空间 STAT:进程的状态,有 S=sleeping,R=running,T=stopped or traced,D=interruptible sleep(不可中断的 睡眠状态),Z=zombie。 %CPU: CPU使用率 %MEM: 物理内存的使用 TIME: 进程占用的总共cpu时间 COMMAND:进程的命令

3.3 vmstat命令

vmstat r列表:是可运行进程的数量 b列表:是阻塞进程的数量 内存性能优4个报告虚拟内存如何使用的字段 swpd已经使用的交换空间的数量 free 自由RAM数量 buff 缓存使用的RAM的数量 cache 文件系统缓存使用的RAM数量 swap交换字段进行详细说明 si 表示从磁盘分页到内存的数量 so 表示从内存分页到磁盘的数量。 其余相关的系统命令:sar、iostat、netstat、free等

四、Linux管道机制

命令1|命令2|命令3 注意: 1.管道命令只处理前面一个命令的输出,不处理错误输出 2.管道命令右边命令,必须能够接受标椎输入命令才行 命令1查询结果为 "3 2 1" 命令2获取到命令1的查询结果 并根据自己的查询条件输出结果为 "2 1" 命令3获取到命令2的查询结果 并根据自己的查询条件输出结果为 "1"

五、mysql性能查询命令

用来查看mysql在运行过程中的属性状态

show status: show status like "%变量%";

查看会话状态

-- 查看当前会话情况 show status like 'Com_%'; -- 查看全局会话情况 show global status like 'Com_%'; -- 查看针对innodb存储引擎状态的统计 show global status like 'Innodb_%'; -- 查看视图连接MySQL服务器次数 show global status like 'connections'; -- 查看服务器工作时间 show global status like 'uptime'; -- 查看锁使用情况 show global status like 'innodb_row_lock%'; innodb_flush_log_at_trx_commit -- 事务提交 commit -- 每执行一次

0: 先把数据和重做日志放在内存中,在一定时间后刷新到磁盘中去(性能最好,安全性不高) 1: 直接把数据和重做日志刷新到磁盘中(相对最稳妥的) 2: 先刷新重做日志,再刷新磁盘(性能差,安全性高)

show processlist:

processlist 命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这个命令。 show processlist;

> 查看mysql系统变量:

--查看当前session级别的隔离方式 show variables; -- 查看isolation帮助 help isolation show variables like '%isolation%'; -- 局部修改 set session transaction isolation level READ COMMITTED; show session variables like'%isolation%'; -- 全局修改 show global variables like '%isolation%'; set global transaction isolation level READ COMMITTED; show variables like "%isolation%"; -- 查询事务的隔离级别 show variables\G; -- 查询关于mysql系统变量 对mysql的影响: 数据库设计 > 数据库表的设计 > sql语句的查询 > 程序 > 硬件 六星教育--2008期mysql优化--李建宇
最新回复(0)