该 diskpagebuffer
表提供了 NDB 集群磁盘数据表的磁盘页缓冲区使用情况统计信息。
该 diskpagebuffer
表包含以下列:
-
node_id
数据节点 ID
-
block_instance
块实例
-
pages_written
写入磁盘的页数。
-
pages_written_lcp
本地检查点写入的页数。
-
pages_read
从磁盘读取的页数
-
log_waits
等待日志写入磁盘的页写入数
-
page_requests_direct_return
缓冲区中可用的页请求数
-
page_requests_wait_queue
等待缓冲区中的页请求数
-
page_requests_wait_io
从磁盘读取页的请求数(缓冲区中不可用)
注意事项
您可以使用该表与 NDB 集群磁盘数据表来确定 DiskPageBufferMemory
是否足够大,以便从缓冲区而不是从磁盘读取数据,从而提高表的性能。
您可以使用以下查询来确定从 DiskPageBufferMemory
到总读取次数的比例:
Press CTRL+C to copySELECT node_id, 100 * page_requests_direct_return / (page_requests_direct_return + page_requests_wait_io) AS hit_ratio FROM ndbinfo.diskpagebuffer;
该查询的结果应该类似于这里所示的结果,每个数据节点一行(在这个示例中,集群有 4 个数据节点):
Press CTRL+C to copy+---------+-----------+ | node_id | hit_ratio | +---------+-----------+ | 5 | 97.6744 | | 6 | 97.6879 | | 7 | 98.1776 | | 8 | 98.1343 | +---------+-----------+ 4 rows in set (0.00 sec)
如果 hit_ratio
值接近 100%,则表示只有很少的读取来自磁盘,而不是来自缓冲区,这意味着磁盘数据读取性能接近最佳水平。如果任何这些值小于 95%,则这是 DiskPageBufferMemory
设置需要在 config.ini
文件中增加的强烈指示。
更改 DiskPageBufferMemory
需要在所有数据节点上执行滚动重新启动后生效。
block_instance
指的是内核块的实例。与块名称一起,该数字可以用来在 threadblocks
表中查找给定的实例。使用该信息,您可以获取与单个线程相关的磁盘页缓冲区指标;以下是一个使用 LIMIT 1
限制输出到单个线程的示例查询:
Press CTRL+C to copymysql> SELECT > node_id, thr_no, block_name, thread_name, pages_written, > pages_written_lcp, pages_read, log_waits, > page_requests_direct_return, page_requests_wait_queue, > page_requests_wait_io > FROM ndbinfo.diskpagebuffer > INNER JOIN ndbinfo.threadblocks USING (node_id, block_instance) > INNER JOIN ndbinfo.threads USING (node_id, thr_no) > WHERE block_name = 'PGMAN' LIMIT 1\G *************************** 1. row *************************** node_id: 1 thr_no: 1 block_name: PGMAN thread_name: rep pages_written: 0 pages_written_lcp: 0 pages_read: 1 log_waits: 0 page_requests_direct_return: 4 page_requests_wait_queue: 0 page_requests_wait_io: 1 1 row in set (0.01 sec)