南大通用GBase8s 数据库 存储监控及调整 方法
通过监控后台I/O ,分析数据的 分配 是否合理,消除I/O 瓶颈。主要监控检查点、缓冲写、数据库空间、日志记录和页面清除。主要监控命令如下:
1) Checkpoint 监控
onstat -g ckp 监控数据库实例的checkpoint 情况
2) 缓冲写监控
onstat -F 监控数据库实例三种写类型情况:前台写、lru 写、 chunk
onstat -R 监控LRU 队列,从而调整 lrus , lru_max_dirty,lru_min_dirty ,避免频繁的 LRU 写引起 checkpoint 而影响性能
3) 数据库空间 监控
onstat -D 监控chunk 的读取和写入的页数,如果太高,说明此 chunk 有太多 I/O ,若此 chunk 存储的多个表,分离数据存储;若此 chunk 存储的是单个表,考虑分片 .
onstat -g iof 监控数据库实例的IO 活动及分布,包括 AIO 和 KAIO
onstat -P 监控bufferpool 中 data pages 和 index pages 占得比例,从而调整表结构和索引结构。
4) 日志监控
onstat -l 监控逻辑日志和物理日志的使用情况,判断其是否足够,避免其引起checkpoint 而影响性能。
1.1 C heckpoint 监控
|
命令 |
输出字段 |
描述 |
|
onstat -g ckp |
AUTO_CKPTS |
On ,设置为自动控制 checkpoint |
|
RTO_SERVER_RESTART |
On/off 性能测试中应置为 off ,否则严重影响性能 | |
|
Trigger : CKPTINTVL LLog/PLog LRU RTO ...... |
触发事件: 尽量使用 CKPTINTVL 触发 checkpoint 配置合理的 plog , llog 调整 LRU 的数量和脏数据的比例 RTO_SERVER_RESTART 引起 ckpt ,应置为 0 CLEANERS | |
|
Total time Flush time Block time |
Checkpoint 执行时间 刷新缓冲池所需的时间 ckpt 期间阻塞的时间 |
1.2 缓冲写监控
|
命令 |
输出字段 |
描述 |
|
onstat -F |
Fg Writes |
Foreground writes 用户线程请求而发生的页面刷新,如果不为 0 ,表明缓冲池中没有空白可用的缓冲区或是缓冲区太脏 此时需要调整 BUFFERPOOL 和 CKPTINTVL 参数 |
|
LRU Writes |
发生的条件是缓冲池超过了 BUFFERPOOL 参数的 lru_max_dirty 值。应尽量避免 LRU 写,应为 0 | |
|
Chunks Writes |
因检查点的执行而发生的写 |
|
命令 |
输出字段 |
描述 |
|
onstat -R |
Buffer pool page size |
Onconfig 文件中配置了几个 bufferpool ,这里就会显示几个。 |
|
f/m |
Free LRU 队列,尚未被使用的页 MRU 队列,已被修改的页 其中修改页面的百分比应始终低于 lru_max_dirty ,否则会有 LRU 写而引起 checkpoint ,影响性能。 |
1. 3 数据库空间监控
通过监控数据库空间的使用情况,观察是否有热点chunk ,然后调整表和索引的分配以均衡 I/O 。
命令详解如下:
|
命令 |
输出字段 |
描述 |
|
onstat -D |
page Rd 、 Wr |
读取 / 写入的页数 |
|
命令 |
输出字段 |
描述 |
|
onstat -g iof |
reads/writes |
未使用 KAIO 的读写情况 |
|
kaio_reads/writes |
使用 KAIO 的读写情况 | |
|
io/s |
每秒 I/O 操作数 |
|
命令 |
输出字段 |
描述 |
|
onstat - P |
Data |
bufferpool 中 data pages 占得比例 |
|
Btree |
bufferpool 中 index pages 占得比例 | |
|
Other |
bufferpool 中其他 pages 占得比例 |
1. 4 日志监控
GBase 8s 包含逻辑日志、物理日志。建议逻辑日志、物理日志不要建在 rootdbs 上,分离存储。
|
命令 |
输出字段 |
描述 |
|
onstat -l |
bufsize |
对应 onconfig 中 LOGBUFF 、 PHYBUFF |
|
physize |
物理日志的页数,物理日志大小 =physize*pagesize | |
|
size |
此逻辑日志的页数,逻辑日志大小 =physize*pagesize | |
|
pages/io |
numpages/numwrits ,写 buffer 的效率 如果 ( pages/io )/bufsize 得到的值为 75% 左右,那么说明 logical log buffer 被有效的使用;如果该值小于 6 5% ,那么说明 logical log buffer 太大;如果该值大于 90 % ,那么说明 logical log buffer 太小;物理日志同上。 |