mysql性能问题
一、centos安装
二、性能问题因素与mysql性能因素
什么是性能问题?
对于用户来说:“又卡了”,“怎么死机了”,“反应太慢了”。
对于程序员来说:“程序执行的时长”,“每秒查询的次数”,“内存,CPU的利用率”。
性能优化的目的:(合理利用可利用的资源)俗称:抠门。
吞吐量,越大越好
延迟,越低越好 同样的资源下(前提),吞吐量越高越好,响应时间越低越好。通俗的来说就是:多快好省。
性能指标参考:
执行时间:一段代码从开始运行到运行结束所使用的时间。
CPU时间:(算法)函数或者线程占用CPU的时间。
内存分配:程序在运行时占用的内存空间。
磁盘吞吐量:描述I/O的使用情况。
网络吞吐量:描述网络的使用情况。
响应时间:系统对某用户行为或者动作做出响应的时间。响应时间越短,性能好。
三、配置虚拟机网络
四、centos配置jdk
- 去Oracle官网下载需要安装的jdk版本,我这里用的是jdk-8u181-linux-x64.tar.gz
- 将该压缩包放到/usr/local/jdk目录下,jdk目录需要自己手动创建,也可以叫java,名字自己随意取(见名知意),然后解压该压缩包,输入如下指令:
[root@localhost home]# tar -zxvf jdk-8u20-linux-x64.tar.gz
- 接下来就该配置环境变量了,输入以下指令进行配置:
[root@localhost home]# 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
注意:第一行的JAVA_HOME=/usr/local/java此处等号右边的是自己的jdk实际解压目录。如果不是该目录则需要改成自己的实际目录,其他不变
- 编辑完之后,保存并退出,然后输入以下指令,刷新环境配置使其生效:
[root@localhost home]# source /etc/profile
测试:
[root@localhost home]# javac
用法: javac <options> <source files>
其中, 可能的选项包括:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath <路径> 指定查找用户类文件和注释处理程序的位置
-cp <路径> 指定查找用户类文件和注释处理程序的位置
-sourcepath <路径> 指定查找输入源文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置
-extdirs <目录> 覆盖所安装扩展的位置
-endorseddirs <目录> 覆盖签名的标准路径的位置
-proc:{none,only} 控制是否执行注释处理和/或编译。
-processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程
-processorpath <路径> 指定查找注释处理程序的位置
-parameters 生成元数据以用于方法参数的反射
-d <目录> 指定放置生成的类文件的位置
-s <目录> 指定放置生成的源文件的位置
-h <目录> 指定放置生成的本机标头文件的位置
-implicit:{none,class} 指定是否为隐式引用文件生成类文件
-encoding <编码> 指定源文件使用的字符编码
-source <发行版> 提供与指定发行版的源兼容性
-target <发行版> 生成特定 VM 版本的类文件
-profile <配置文件> 请确保使用的 API 在指定的配置文件中可用
-version 版本信息
-help 输出标准选项的提要
-A关键字[=值] 传递给注释处理程序的选项
-X 输出非标准选项的提要
-J<标记> 直接将 <标记> 传递给运行时系统
-Werror 出现警告时终止编译
@<文件名> 从文件读取选项和文件名
五、Linux性能查询的常用命令
1. ps命令
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常 强大的进程查看命令.使用该命令可以确定 有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进 程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到的. ps命令 最常 用的还是用于监控后台进程的 工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,所以如果需要检测其情况,便可以使用ps命令了.
[root@localhost ~]# ps --help
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).
命令参数:
a 显示所有进程
-a 显示同一终端下的所有程序
-A 显示所有进程
c 显示进程的真实名称
-N 反向选择
-e 等于“-A”
e 显示环境变量
f 显示程序间的关系
-H 显示树状结构
r 显示当前终端的进程
T 显示当前终端的所有程序
u 指定用户的所有进程
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
-C<命令> 列出指定命令的状况
–lines<行数> 每页显示的行数
–width<字符数> 每页显示的字符数
–help 显示帮助信息
–version 显示版本显示
在命令中:
%CPU 表示cpu(代表每个处理器的整体使用率)的使用率,如果持续一段时间里CPU的使用率大于80%,这就可能表名CPU出现瓶颈。
%mem 表示内存的占用率 stat中的参数意义:D 不可中断 Uninterruptible(usually IO) R 正在运行,或在队列中的进程 S 处于休眠状态 T 停止或被追踪 Z 僵尸进程 W 进入内存交换(从内核2.6开始无效) X 死掉的进程 < 高优先级 n 低优先级 s 包含子进程位于后台的进程组
最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作
2. top命令
top命令是linux操作系统下最常用的性能分析工具,能够实时地显示操作系统中各个进程消耗资源的情况。该命令可以 显示CPU是引用、内存使用和执行时间, 下面执行top命令看下执行情况:
下面分析一下top命令的统计信息的含义。
top - 13:57:00 up 47 min, 2 user, load average: 0.03, 0.04, 0.05
top命令第1行信息,
13:57:00 表示系统运行的当前时间
up 47 min 表示系统运行时间
2 user 表示登录用户的数量。
load average: 0.03, 0.04, 0.05 表示系统负载,既任务队列的平均长度,三个数值分别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: 171 total 表示进程总数
1 running 正在运行的进程数量
169 sleeping 睡眠的进程数量
0 stopped 停止的进程数量
1 zombie 表示僵尸进程数量
0.1 us 表示用户空间占用CPU的百分比(如果用户时间值很高,表明系统正在执行实际的工作)
0.2 sy(表示内核空间占用CPU的百分比,包括终端,(系统时间值持续很高表名网络或驱动器堆栈可能存在瓶颈。通 常 ,系统只会花费很少时间在内核时间 上)
0.0 ni 表示用户进程空间改变过优先级的进程占用CPU的百分比
99.7 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:进程的命令
备注:ctrl + z 结束运行
3. vmstat命令
首先,分析下进程(procs)的两列信息,如下所示。
- r 列表式可运行进程的数量
- b 列表式阻塞进程的数量
内存性能优4个报告虚拟内存如何使用的字段
- swpd已经使用的交换空间的数量
- free 自由RAM数量
- buff 缓存使用的RAM的数量
- cache 文件系统缓存使用的RAM数量
- swap 交换字段进行详细说明
- si 表示从磁盘分页到内存的数量
- so 表示从内存分页到磁盘的数量。
其余相关的系统命令:sar、iostat、netstat、free等
六、linux管道
linux系统搭建省略:
管道是一种两个进程间进行单向通信的机制。因为管道传递数据的单向性,管道又称为半双工管道。管道的这一特点决定 了器使用的局限性。管道是Linux支持 的最初Unix IPC形式之一,具有以下特点: * 数据只能由一个进程流向另一个进程(其中一个读管道,一个写管道);如果要进行双工通信,需要建 立两个管 道 。 * 管道只能用于父子进程或者兄弟进程间通信。,也就是说管道只能用于具有亲缘关系的进程间通信。 注意:从管道读数 据是一次性操作,数据一旦被 读,它就从管道中被抛弃,释放空间以便写更多的数据。 格式
command1 | command2 | command3
操作符是:”|”,它只能处理经由前面一个指令传出的正确输出信息,对错误信息信息没有直接处理能力。然后,传递给下 一个命令,作为标准的输入
【指令1】正确输出,作为【指令2】的输入 然后【指令2】的输出作为【指令3】的输入 ,【指令3】输出就会直接显示 在屏幕上面了。 通过管道之后【指令1】和【指令2】的正确输出不显示在屏幕上面
【提醒注意】:
- 管道命令只处理前一个命令正确输出,不处理错误输出;
- 管道命令右边命令,必须能够接收标准输入流命令才行;
七、mysql性能查询命令
1. show status
– 用来查看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%';
2. show processlist
processlist 命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这个命令。
show processlist;
3. show variables
查看mysql系统变量
show variables;
--查看当前session级别的隔离方式
show variables like '%isolation%';
-- 查看isolation帮助 help 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;
下一篇:mysql性能压测 04
上一篇:mysql物理文件 02