系统巡检:Linux、MySQL、SQLServer、Oracle

一.Linux巡检

总括

top动态地查看系统中各个进程的资源占用状况。
uptime查看系统运行时间、负载情况。
df -h查看文件系统空间使用情况。
free -m查看内存使用情况。
netstat -ant查看当前网络连接情况。
du -sh *|sort -rh

查看应用服务器下面的日志大小情况。

(要cd到logs或需要检查的文件对应目录中)

1.top

(a)top

作用:动态地查看系统中各个进程的资源占用状况。

在服务器中输入top即可启动该命令。启动后,会显示一个动态更新的表格。

注意:top命令显示的是动态更新的信息,因此它可能会占用一定的CPU资源,可能会影响到系统的性能。

top表格各列字段及含义

PID进程ID
USER进程所有者
PR进程优先级
NInice值(优先级调整值)
VIRT进程使用的虚拟内存总量,单位kb
RES进程使用的、未被换出的物理内存大小,单位kb
SHR共享内存大小,单位kb
S进程状态(如R表示正在运行,S表示休眠等)
%CPU上次更新到现在的CPU时间占用百分比
%MEM进程使用的物理内存百分比
TIME+进程使用的CPU时间总计,单位1/100秒
COMMAND启动进程的命令名/命令行

主要观察服务器的CPU使用状况,过高的时候代表系统可能无法正常运行。

(b) top -o %CPU

按CPU使用率排序

(c)top -o %MEM

按内存使用率排序

(d)交互命令
在top命令运行时,可以按以下键进行交互
P按CPU使用率排序(等同于:top -o %CPU)
M按内存使用量排序(等同于:top -o %MEM
N以PID顺序排序
T按时间/累计时间排序
k终止一个进程(需要输入进程ID)
r改变进程优先级(需要输入进程ID和优先级)
q退出top
f(F)进入字段管理界面,用于选择显示的字段
o(O)改变字段的排序顺序(升序/降序)
h(?)显示帮助信息
1显示每个核心的cpu使用情况

 示例:在top命令运行时,按1如下图可以看到每个核心的cpu使用情况。

2.uptime

作用:查看系统运行时间、负载情况。

17:25:15up 505 days,  5:301 userload average: 0.17, 0.41, 0.46
当前系统时间系统已开机运行了多长时间
即:已运行505天5小时30分钟

当前登录用户数:1

即:活动用户

过去 1分钟、5分钟、 15 分钟内可用的系统负载的平均值

3.df -h

作用:查看文件系统空间使用情况。

这个大小跟前一个月的空间进行比对,大概就能知道一个月增长了多少空间。但是一般超过80%以上就要开始关注了,空间一旦不足,会影响系统使用。

4.free -m

作用:查看内存使用情况。

如果发现空闲内存很小,可以通过: ps aux --sort=-%mem  这个命令,将占用内存高的部分给打印出来。

5.netstat -ant

作用:查看当前网络连接情况。

 这几个端口可以看到处于监听状态,正常运行。

6.du -sh *|sort -rh

作用:查看应用服务器下面的日志大小情况。(要cd到logs或需要检查的文件对应目录中)

可以由大到小排序,如果发现哪一天的日志大小远超平均大小,这个时候要注意了,查看下这个日志上的报错信息,看下是哪里出问题了。

注:快速查询所有日志:find / -name "*.log"

二.MySQL数据库巡检

数据库监听端口:netstat -ano|grep 3306

1.数据库版本

select version();

2.数据库运行时长

SHOW STATUS LIKE "Uptime";

3.数据文件路径

SHOW VARIABLES LIKE 'datadir';

4.数据库大小(MB)

SELECT  
    table_schema AS `Database`,  
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS `Size (MB)`  
FROM  
    information_schema.TABLES  
GROUP BY  
    table_schema;

注:`Database`与 `Size (MB)`原先使用的是单引号,但是实际使用有发生报错,改为了反引号

5.数据库最大(并发)连接数

show variables like '%max_connections%';

6.数据库最大已连接次数、最长连接时间

show status like 'max_used_connections%';

7.当前连接数

show status like '%Threads_connected%';

8.数据库实际连接情况

select client_ip,count(client_ip) as client_num from (select substring_index(host,':' ,1) as client_ip from information_schema.processlist ) as connect_info group by client_ip order by client_num desc;

9.锁等待检查

show engine innodb status;

查看最近死锁的日志,Status里有数据的话可以copy出来,去分析有lock的死锁语句 

10.检查是否开启log-bin日志

(a)show variables like 'log_bin';

看到 Value = ON 时,这表示MySQL的二进制日志(binlog)功能已经被启用,但是并没有直接显示二进制日志文件的路径。ON 仅仅是一个标志,表示binlog是活跃的。要找到实际的binlog文件路径和文件名,可能需要查看MySQL的配置文件(如 my.cnf 或 my.ini),因为在那里通常会指定binlog的基本路径和前缀。

(b)当前正在使用的binlog文件的完整路径和名称

SHOW BINARY LOGS;

三.SQLServer数据库巡检

1.日志大小及空间占用率使用情况

常用:DBCC SQLPERF(LOGSPACE);

较标准:DBCC SQLPERF(LOGSPACE, <database_name>)

2.表空间及数据文件使用情况

SELECT 
    name AS [File Name],
    size/128 AS [Size in MB],
    FILEPROPERTY(name, 'SpaceUsed')/128 AS [Space Used in MB],
    (size - FILEPROPERTY(name, 'SpaceUsed'))/128 AS [Available Space in MB]
FROM 
    sys.database_files;

数据文件:3818MB

3.获取缓存命中率(BufferCacheHitRatio)

SELECT (a.cntr_value * 1.0 / b.cntr_value) * 100.0 [BufferCacheHitRatio]
FROM (SELECT * FROM sys.dm_os_performance_counters
WHERE counter_name = 'Buffer cache hit ratio'
AND object_name = CASE WHEN @@SERVICENAME = 'MSSQLSERVER'
THEN 'SQLServer:Buffer Manager'
ELSE 'MSSQL$' + rtrim(@@SERVICENAME) +
':Buffer Manager' END ) a
CROSS JOIN
(SELECT * from sys.dm_os_performance_counters
WHERE counter_name = 'Buffer cache hit ratio base'
and object_name = CASE WHEN @@SERVICENAME = 'MSSQLSERVER'
THEN 'SQLServer:Buffer Manager'
ELSE 'MSSQL$' + rtrim(@@SERVICENAME) +
':Buffer Manager' END ) b;

缓存命中率100%,缓存大小合适。 

4.找出执行最慢的SQL语句

SELECT TOP 20
       total_worker_time / 1000 AS [总消耗CPU 时间(ms)],
       execution_count [运行次数],
       qs.total_worker_time / qs.execution_count / 1000 AS [平均消耗CPU 时间(ms)],
       last_execution_time AS [最后一次执行时间],
       max_worker_time / 1000 AS [最大执行时间(ms)],
       SUBSTRING(qt.text, qs.statement_start_offset / 2 + 1,
        (CASE  WHEN qs.statement_end_offset = -1 THEN   DATALENGTH(qt.text)
         ELSE  qs.statement_end_offset END - qs.statement_start_offset) / 2 + 1
         ) AS [使用CPU的语法],
       qt.text [完整语法],
       dbname = DB_NAME(qt.dbid),
       OBJECT_NAME(qt.objectid, qt.dbid) ObjectName
FROM sys.dm_exec_query_stats qs WITH (NOLOCK) CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE execution_count > 1 ORDER BY total_worker_time DESC;

注意:这个查询可能会返回非常大的SQL文本,特别是当qt.text包含完整的存储过程或函数时。如果您只对消耗CPU时间的那部分SQL感兴趣,可以只关注[使用CPU的语法]列。

四.Oracle数据库巡检

1.oracle进程数

(a)最大进程数

SELECT value AS max_processes
FROM v$parameter
WHERE name = 'processes';

(b)实际进程数

SELECT COUNT(*) AS process_count FROM v$process;

2.游标数

(a)游标数参数

SELECT name, value
FROM v$parameter
WHERE name = 'open_cursors';

 (b)当前的游标数

SELECT COUNT(*) AS "当前游标数"
FROM V$OPEN_CURSOR; 

3.密码有效期

select * from dba_profiles s where s.profile='DEFAULT' AND resource_name like 'PASSWORD%';

4.缓存命中率

查看缓冲区命中率(如果命中率低于90%则需加大数据库参数db_cache_size)

SELECT a.VALUE + b.VALUE logical_reads,

       c.VALUE phys_reads,

       round(100 * (1 - c.value / (a.value + b.value)), 4) hit_ratio

  FROM v$sysstat a, v$sysstat b, v$sysstat c

 WHERE a.NAME = 'db block gets'

   AND b.NAME = 'consistent gets'

   AND c.NAME = 'physical reads';

5.性能最差的SQL

SELECT * FROM ( SELECT PARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text
FROM v$sqlarea
ORDER BY disk_reads DESC)
WHERE ROWNUM<100;

注意:以上均以作者君使用到的项目、产品为示例,仅做参考。可根据自身情况,修改语句中的视图、表与字段,进行相关查询。

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值