服务器巡检方法
一、服务器检查
1.1 查看磁盘空间使用率
正常:rate<80%
关注:80%<rate<90%
警告:90%>rate
1.2 内存
total:表示系统的总内存
used:表示应用程序已经使用的内存
free:表示当前还没有被使用的内存
shared:表示共享链接库使用的内存
buff/cache:表示系统的page,cache和buffer使用到的内存
available:表示应用程序还可以申请到的内存
系统当前使用到的内存是:used + buff/cache,used 中包含了shared。
total = used + buff/cache + free
available <= free + buff/cache,系统的一些 page 或 cache 不能被回收。
关注对象:
available 内存占比不宜过低
free 内存应留有余量,因为这是系统不释放 buff/cache 直接可以调用的内存
1.3 IO
命令:iostat -x l 5
注: -x 显示扩展,时间间隔为1秒,执行5次
%iowait:CPU用于等待I/O操作占用CPU总时间的百分比
%idle:CPU 空闲时间占比
await:平均每次 IO 请求的等待时间(包括等待时间和处理时间,毫秒为单位)
svctm:平均每次 IO 请求的处理时间(毫秒为单位)
%util:每秒用于 IO 操作的时间占比
分析方法:
若 %iowait 的值过高,表示磁盘存在 I/O 瓶颈
若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
若 %idle 的值持续低于 1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是CPU
await 的值越接近 svctm 越好
%util 不宜过高
1.4 开机时间及僵尸进程
命令:top
total : 进程总数
running : 正在运行的进程数
sleeping : 睡眠的进程数
stopped : 停止的进程数
zombie : 僵尸进程数
us : 用户空间占用CPU百分比
sy : 内核空间占用CPU百分比
ni : 用户进程空间内改变过优先级的进程占用CPU百分比
id : 空闲CPU百分比
wa : 等待输入输出的CPU时间百分比
hi : 硬中断(Hardware IRQ)占用CPU的百分比
si : 软中断(Software Interrupts)占用CPU的百分比
st : 用于有虚拟cpu的情况,用来指示被虚拟机偷掉的cpu时间。
备注:主要看有无僵尸线程数,以及相关经常占内存是否正常
二、mysql数据库巡检
注意:下面操作如果查不出来数据,可能是mysql版本导致兼容性问题,执行下列命令即可
命令:set global show_compatibility_56=on;
2.1 MySQL缓冲池命中率
SQL:
SELECT concat(LEFT(
( ( SELECT VARIABLE_VALUE FROM information_schema.global_status WHERE VARIABLE_NAME = 'INNODB_BUFFER_POOL_READ_REQUESTS' )
- ( SELECT VARIABLE_VALUE FROM information_schema.global_status WHERE VARIABLE_NAME = 'INNODB_BUFFER_POOL_READS' ) )
/ ( SELECT VARIABLE_VALUE FROM information_schema.global_status WHERE VARIABLE_NAME = 'INNODB_BUFFER_POOL_READ_REQUESTS' ),
5) * 100,'%') as '缓冲池命中率' FROM DUAL;
示例:
说明:缓冲池命中率越高,说明效率越高。
2.2 线程使用情况
SQL:
select t.curren as 当前连接的线程数,t.max as 最大线程数, t.active as 激活的线程数, CONCAT(round(t.curren/t.max,4)*100,'%')
as 当前线程使用率 from
(select
(select
VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME =
'THREADS_CONNECTED') as curren,
(select
VARIABLE_VALUE from information_schema.GLOBAL_VARIABLES where VARIABLE_NAME =
'MAX_CONNECTIONS') as max,
(select
VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME =
'THREADS_RUNNING') as active
from dual ) t;
示例:
2.3 数据库锁情况
SQL:
select VARIABLE_NAME as 当前等待锁,VARIABLE_VALUE as 当前等待锁数量 from
information_schema.GLOBAL_STATUS t where VARIABLE_NAME =
'INNODB_ROW_LOCK_CURRENT_WAITS';
示例:
2.4 表空间使用情况以及数据量大小
SQL:
SELECT
CONCAT( table_schema, '.', table_name ) AS '表名',
CONCAT( ROUND( table_rows / 1000000, 4 ), 'M' ) AS '每行大小',
CONCAT( ROUND( data_length /( 1024 * 1024 * 1024 ), 4 ), 'G' ) AS '数据大小',
CONCAT( ROUND( index_length /( 1024 * 1024 * 1024 ), 4 ), 'G' ) AS '索引大小',
table_rows / 10000 AS "行数(万行)",
CONCAT( ROUND(( data_length + index_length )/( 1024 * 1024 * 1024 ), 4 ), 'G' ) AS '总大小'
FROM
information_schema.TABLES
WHERE table_schema = 'csyp_mes'
ORDER BY
table_rows DESC;
注:table_schema 的值根据项目来改。
示例:
2.5 检查主从是否正常
在备库执行:SHOW SLAVE STATUS\G;
主要检查 Slave_IO_Running 和 Slave_SQL_Running 这两个进程状态是否是 yes,这两 个进程的含义如下:
1)Slave_IO_Running:此进程负责 slave 从 master 服务器上读取 binlog 日志,并写入 slave 服务器上的中继日志中
2)Slave_SQL_Running:此进程负责读取并且执行中继日志中的 binlog 日志。
注:只要其中有一个进程的状态是 no,则表示复制进程停止,错误原因可以从 Last_Errno 后面看到
2.6 检查数据库备份是否正常
命令:crontab -l
备注:主要根据linux定时任务到对应文件夹下去看相关备份是否正常。
三、oracle数据库巡检
3.1 表空间大小以及使用率
表空间SQL:
SELECT b.tablespace_name AS "表空间",
b.file_name AS "物理文件名",
b.bytes / 1024 / 1024 AS "当前大小(M)",
(b.bytes - SUM(nvl(a.bytes, 0))) / 1024 / 1024 AS "已使用(M)",
substr((b.bytes - SUM(nvl(a.bytes, 0))) / (b.bytes) * 100, 1, 5) AS "使用率(%)",
CASE b.autoextensible
WHEN 'YES' THEN
'是'
ELSE
'否'
END AS "是否自增",
b.maxbytes / 1024 / 1024 AS "自增最大容量(M)"
FROM dba_free_space a, dba_data_files b
WHERE a.file_id = b.file_id
AND a.tablespace_name IN ('MES_DATA')
GROUP BY b.tablespace_name, b.file_name,
b.bytes, b.autoextensible, b.maxbytes
ORDER BY b.tablespace_name;
文件使用大小sql:
select b.file_id 文件ID,
b.tablespace_name 表空间,
b.file_name 物理文件名,
b.bytes 总字节数,
(b.bytes-sum(nvl(a.bytes,0))) 已使用,
sum(nvl(a.bytes,0)) 剩余,
round((sum(nvl(a.bytes,0))/(b.bytes)),5)*100||'%' 剩余百分比
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_name,b.file_id,b.bytes
order by b.tablespace_name;
自动生成的表空间SQL:
with T as
(SELECT 'alter tablespace ' || CC.TABLESPACE_NAME || ' add datafile ' || '''' ||
CC.MAX_FILE || '''' || ' size 100M autoextend on;' EXTEND_DDL,
CC.TABLESPACE_NAME
FROM (SELECT DEST || TABLESPACE_NAME || '_' || (COUNT(*) + 1) || '.DBF' MAX_FILE,
TABLESPACE_NAME
FROM (SELECT CASE
WHEN INSTR(C.FILE_NAME, ' \ ') > 0 THEN
SUBSTR(C.FILE_NAME,
INSTR(C.FILE_NAME, ' = ') + 1,
INSTR(C.FILE_NAME, ' \ ', -1) -
INSTR(C.FILE_NAME, ' = '))
ELSE
SUBSTR(C.FILE_NAME,
INSTR(C.FILE_NAME, ' = ') + 1,
INSTR(C.FILE_NAME, ' / ', -1) -
INSTR(C.FILE_NAME, ' = '))
END DEST,
C.FILE_NAME,
C.TABLESPACE_NAME
FROM DBA_DATA_FILES C)
GROUP BY TABLESPACE_NAME, DEST) CC)
select b.file_id 文件ID,
b.tablespace_name 表空间,
b.file_name 物理文件名,
b.bytes / 1024 / 1024 总字节数,
(b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024 已使用,
sum(nvl(a.bytes, 0)) / 1024 / 1024 剩余,
round((sum(nvl(a.bytes, 0)) / (b.bytes)), 5) * 100 || '%' 剩余百分比,
b.maxbytes / 1024 / 1024 最大空间,
EXTEND_DDL 扩展表空间语句
from dba_free_space a, dba_data_files b, T t
where a.file_id = b.file_id and
t.TABLESPACE_NAME = b.tablespace_name group by b.tablespace_name,
b.file_name, b.file_id, b.bytes, b.maxbytes, EXTEND_DDL order by
b.tablespace_name;
3.2 数据行数最大前十的表以及数据量
SQL:
select t.table_name,t.tablespace_name,t.num_rows/10000 "rows(万行)" from user_tables t order by t.num_rows desc
示例:
注:oracle 库数据超过5亿就进行提醒
3.3 数据对象大小
SQL:
select t.segment_name,t.segment_type,t.tablespace_name,to_number(t.bytes)/1024/1024/1024 as "TOTAL(GB)"
from user_segments t order by t.bytes desc;
示例:
3.4 无效对象
SQL:
SELECT owner,object_name, object_type,status FROM dba_objects WHERE status='INVALID';
示例:
3.5 检查dg是否正常
方法1:查询主库备库最新日志版本是否差异大。
SQL:
select max(sequence#) from v$archived_log where applied='YES';
备注:一般有差异也是在两个版本之内,如果有差异,间隔几秒在执行。
方法2:在备库看相关进程(ARCH、MRPO和RFS)是否都启动
SQL:
select process from v$managed_standby;
备注:ARCH、MRPO和RFS三个进程都有才是正常的
3.6 检查数据库备份是否正常
命令:crontab -l
备注:主要根据linux定时任务到对应文件夹下去看相关备份是否正常。
本文来自博客园,作者:风光小磊,转载请注明原文链接:https://www.cnblogs.com/lei-z/p/16440854.html