服务器巡检方法

一、服务器检查

1.1 查看磁盘空间使用率

image

正常:rate<80%
关注:80%<rate<90%
警告:90%>rate

1.2 内存

image
 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
image
注: -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
image
 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;

示例:
image
说明:缓冲池命中率越高,说明效率越高。

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;


示例:
image

2.3  数据库锁情况

SQL:

select VARIABLE_NAME as 当前等待锁,VARIABLE_VALUE as 当前等待锁数量 from
information_schema.GLOBAL_STATUS t where VARIABLE_NAME =
'INNODB_ROW_LOCK_CURRENT_WAITS';

示例:
image

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 的值根据项目来改。
示例
image

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
image
备注:主要根据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;

image

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

示例:
image
注: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;

示例:
image

3.4  无效对象

SQL:

SELECT owner,object_name, object_type,status FROM dba_objects WHERE status='INVALID';


示例:
image

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
image
备注:主要根据linux定时任务到对应文件夹下去看相关备份是否正常。

posted @ 2022-07-03 20:39  风光小磊  阅读(2317)  评论(0编辑  收藏  举报