Linux 记录
- 更改时间命令:date -s “更改后的时间” hwclock -w
- vmstat命令:vmstat delay count 虚拟内存统计工具,可以看每秒有多少个CPU进程在进出、当前CPU队列中有几个进程在等待。
- iostat命令:iostat -dx delay count 监控磁盘的写入写出。
- mpstat命令:mpstat delay count 返回CPU的详细性能信息。
- sar命令: sar -q 汇总CPU状况,sar -b 汇总I/O状况,sar的历史数据保存在/var/log/sa目录下,在/etc/sysconfig/sysstat中修改留存期。
- 系统的I/O调度算法:
查看:cat /sys/block/sda/queue/scheduler 默认为cfq(公平调度算法)
临时修改:将noop电梯调度算法修改为deadline绝对保障算法(重启服务器后失效) - 调整预读参数:可通过调整内核预读磁盘扇区参数进行I/O优化
查看:/sbin/blockdev --getra /dev/sda
临时修改:/sbin/blockdev --setra 参数值 /dev/sda - 对数据库管理不友好:
Swap :查看方法,free查看Swap是否使用
关闭方法,swapoff -a
透明大页:查看方法,cat /sys/kernel/mm/transparent_hugepage/enabled
关闭方法,echo never > /sys/kernel/mm/transparent_hugepage/enabled
NUMA:查看方法,numactl --hardware
关闭方法,编辑/etc/grub.conf,在kernel行末加numa=off
PG记录
- postgresql.conf参数配置
shared_buffers:共享内存大小参数,建议设置大一些(默认的128MB太小,建议使用pgbench测试取一个合适的值)
work_mem:每个服务进程进行排序或hash时可分配的最大内存(默认为4MB,查看查询计划,若发现使用了External merge排序方法,说明需要适当增加work_mem值) - 统计信息工具
pg_stat_database
用于计算缓存命中率:select blks_hit::float/(blks_read + blks_hit) as cache_hit_ratio from pg_stat_database where datname=current_database();
结果说明:理论上应非常接近1,如果低于99%可考虑调大shared_buffers的值。
用于计算事务提交率:select xact_commit::float/(xact_commit + xact_rollback) as successful_xact_ratio from pg_stat_database where datname=current_database();
结果说明:理论上应非常接近1,否则检查是否要死锁。
pg_stat_user_tables
用于计算索引扫描与整个数据库的所有扫描的比率:
select sum(idx_scan)/(sum(idx_scan) + sum(seq_scan)) as idx_scan_ratio from pg_stat_all_tables where schemaname=‘public’;
select relname,idx_scan::float/(idx_scan+seq_scan+1) as idx_scan_ratio from pg_stat_all_tables where schemaname=‘public’ order by idx_scan_ratio asc;
结果说明:索引使用率应尽可能接近1。
pg_stat_statements
postgresql.conf 文件中pa_stat_statements参数说明:
shared_preload_libraries = ‘pg_stat_statements’,表示要在启动时导入pg_stat_statements 动态库。
custom_variable_classes = ‘pg_stat_statements’,是为了其下面的几个配置项。
pg_stat_statements.max = 1000,表示监控的语句最多为1000句。
pg_stat_statements.track = top,表示不监控嵌套的sql语句。
pg_stat_statements.track = all,表示监控所有语句。
pg_stat_statements.track_utility = true,表示对 INSERT/UPDATE/DELETE/SELECT 之外的sql动作也作监控。
pg_stat_statements.save = true,表示当postgresql止时,把信息存入磁盘文件以备下次启动时再使用。
查询平均执行时间最长最长的n条记录:
select calls,total_time/calls as avg_time,left(query,80) from pg_stat_statements order by 2 desc limit n;
查询数据库中表大小:
前10大的表(含索引):SELECT table_schema || ‘.’ || table_name AS table_full_name, pg_size_pretty(pg_total_relation_size(’"’ || table_schema || ‘"."’ || table_name || ‘"’)) AS size
FROM information_schema.tables
ORDER BY
pg_total_relation_size(’"’ || table_schema || ‘"."’ || table_name || ‘"’) DESC limit 10;
分理数据和索引:
SELECT
table_name,
pg_size_pretty(table_size) AS table_size,
pg_size_pretty(indexes_size) AS indexes_size,
pg_size_pretty(total_size) AS total_size
FROM (
SELECT
table_name,
pg_table_size(table_name) AS table_size,
pg_indexes_size(table_name) AS indexes_size,
pg_total_relation_size(table_name) AS total_size
FROM (
SELECT (’"’ || table_schema || ‘"."’ || table_name || ‘"’) AS table_name
FROM information_schema.tables
) AS all_tables
ORDER BY total_size DESC
) AS pretty_sizes;
查单个表的大小:
select pg_size_pretty(pg_relation_size(‘表名’));