このページは機械翻訳したものです。
InnoDB
INFORMATION_SCHEMA
バッファープールテーブルは、バッファープールのステータス情報、および InnoDB
バッファープール内のページに関するメタデータを提供します。
InnoDB
INFORMATION_SCHEMA
バッファープールテーブルには、下に一覧表示されているものが含まれます。
Press CTRL+C to copymysql> SHOW TABLES FROM INFORMATION_SCHEMA LIKE 'INNODB_BUFFER%'; +-----------------------------------------------+ | Tables_in_INFORMATION_SCHEMA (INNODB_BUFFER%) | +-----------------------------------------------+ | INNODB_BUFFER_PAGE_LRU | | INNODB_BUFFER_PAGE | | INNODB_BUFFER_POOL_STATS | +-----------------------------------------------+
テーブルの概要
INNODB_BUFFER_PAGE
:InnoDB
バッファープール内の各ページに関する情報を保持します。INNODB_BUFFER_PAGE_LRU
:InnoDB
バッファープール内のページに関する情報、特に、いっぱいになったときにバッファープールからどのページを削除するかを決定する LRU リスト内の各ページの順序を保持します。INNODB_BUFFER_PAGE_LRU
テーブルには、INNODB_BUFFER_PAGE
テーブルと同じカラムがありますが、INNODB_BUFFER_PAGE_LRU
テーブルにはBLOCK_ID
カラムではなくLRU_POSITION
カラムがある点が異なります。INNODB_BUFFER_POOL_STATS
: バッファープールのステータス情報を提供します。 同じ情報のほとんどは、SHOW ENGINE INNODB STATUS
の出力で提供されるか、またはInnoDB
バッファープールのサーバーステータス変数を使用して取得できます。
INNODB_BUFFER_PAGE
または INNODB_BUFFER_PAGE_LRU
テーブルをクエリーすると、パフォーマンスに影響する可能性があります。 パフォーマンスへの影響を認識し、許容できると判断した場合を除き、本番システムでこれらのテーブルをクエリーしないでください。 本番システムのパフォーマンスへの影響を回避するには、調査する問題を再現し、テストインスタンスのバッファプール統計をクエリーします。
例 15.6 INNODB_BUFFER_PAGE テーブル内のシステムデータのクエリー
このクエリーでは、TABLE_NAME
値が NULL
であるページ、またはユーザー定義テーブルを示すスラッシュ/
またはピリオド .
がテーブル名に含まれるページを除外することで、システムデータを含むページの概算数が提供されます。
Press CTRL+C to copymysql> SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE WHERE TABLE_NAME IS NULL OR (INSTR(TABLE_NAME, '/') = 0 AND INSTR(TABLE_NAME, '.') = 0); +----------+ | COUNT(*) | +----------+ | 1516 | +----------+
このクエリーは、システムデータを含むページの概数、バッファープールページの総数、およびシステムデータを含むページの概略の割合 (%) を返します。
Press CTRL+C to copymysql> SELECT (SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE WHERE TABLE_NAME IS NULL OR (INSTR(TABLE_NAME, '/') = 0 AND INSTR(TABLE_NAME, '.') = 0) ) AS system_pages, ( SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE ) AS total_pages, ( SELECT ROUND((system_pages/total_pages) * 100) ) AS system_page_percentage; +--------------+-------------+------------------------+ | system_pages | total_pages | system_page_percentage | +--------------+-------------+------------------------+ | 295 | 8192 | 4 | +--------------+-------------+------------------------+
バッファープール内のシステムデータのタイプは、PAGE_TYPE
値をクエリーすることによって確認できます。 たとえば、次のクエリーは、システムデータを含むページ間の 8 つの個別の PAGE_TYPE
値を返します。
Press CTRL+C to copymysql> SELECT DISTINCT PAGE_TYPE FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE WHERE TABLE_NAME IS NULL OR (INSTR(TABLE_NAME, '/') = 0 AND INSTR(TABLE_NAME, '.') = 0); +-------------------+ | PAGE_TYPE | +-------------------+ | SYSTEM | | IBUF_BITMAP | | UNKNOWN | | FILE_SPACE_HEADER | | INODE | | UNDO_LOG | | ALLOCATED | +-------------------+
例 15.7 INNODB_BUFFER_PAGE テーブル内のユーザーデータのクエリー
このクエリーでは、TABLE_NAME
値が NOT NULL
および NOT LIKE '%INNODB_TABLES%'
であるページをカウントすることで、ユーザーデータを含むページの概算数が提供されます。
Press CTRL+C to copymysql> SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE WHERE TABLE_NAME IS NOT NULL AND TABLE_NAME NOT LIKE '%INNODB_TABLES%'; +----------+ | COUNT(*) | +----------+ | 7897 | +----------+
このクエリーは、ユーザーデータを含むページの概数、バッファープールページの総数、およびユーザーデータを含むページの概略の割合 (%) を返します。
Press CTRL+C to copymysql> SELECT (SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE WHERE TABLE_NAME IS NOT NULL AND (INSTR(TABLE_NAME, '/') > 0 OR INSTR(TABLE_NAME, '.') > 0) ) AS user_pages, ( SELECT COUNT(*) FROM information_schema.INNODB_BUFFER_PAGE ) AS total_pages, ( SELECT ROUND((user_pages/total_pages) * 100) ) AS user_page_percentage; +------------+-------------+----------------------+ | user_pages | total_pages | user_page_percentage | +------------+-------------+----------------------+ | 7897 | 8192 | 96 | +------------+-------------+----------------------+
このクエリーは、バッファープール内のページを含むユーザー定義のテーブルを識別します。
Press CTRL+C to copymysql> SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE WHERE TABLE_NAME IS NOT NULL AND (INSTR(TABLE_NAME, '/') > 0 OR INSTR(TABLE_NAME, '.') > 0) AND TABLE_NAME NOT LIKE '`mysql`.`innodb_%'; +-------------------------+ | TABLE_NAME | +-------------------------+ | `employees`.`salaries` | | `employees`.`employees` | +-------------------------+
例 15.8 INNODB_BUFFER_PAGE テーブル内のインデックスデータのクエリー
インデックスページに関する情報を取得するには、そのインデックスの名前を使用して INDEX_NAME
カラムをクエリーします。 たとえば、次のクエリーは、employees.salaries
テーブルで定義されている emp_no
インデックスのページの数とページの合計データサイズを返します。
Press CTRL+C to copymysql> SELECT INDEX_NAME, COUNT(*) AS Pages, ROUND(SUM(IF(COMPRESSED_SIZE = 0, @@GLOBAL.innodb_page_size, COMPRESSED_SIZE))/1024/1024) AS 'Total Data (MB)' FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE WHERE INDEX_NAME='emp_no' AND TABLE_NAME = '`employees`.`salaries`'; +------------+-------+-----------------+ | INDEX_NAME | Pages | Total Data (MB) | +------------+-------+-----------------+ | emp_no | 1609 | 25 | +------------+-------+-----------------+
このクエリーは、employees.salaries
テーブルで定義されているすべてのインデックスのページの数とページの合計データサイズを返します。
Press CTRL+C to copymysql> SELECT INDEX_NAME, COUNT(*) AS Pages, ROUND(SUM(IF(COMPRESSED_SIZE = 0, @@GLOBAL.innodb_page_size, COMPRESSED_SIZE))/1024/1024) AS 'Total Data (MB)' FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE WHERE TABLE_NAME = '`employees`.`salaries`' GROUP BY INDEX_NAME; +------------+-------+-----------------+ | INDEX_NAME | Pages | Total Data (MB) | +------------+-------+-----------------+ | emp_no | 1608 | 25 | | PRIMARY | 6086 | 95 | +------------+-------+-----------------+
例 15.9 INNODB_BUFFER_PAGE_LRU テーブル内の LRU_POSITION データのクエリー
INNODB_BUFFER_PAGE_LRU
テーブルは、InnoDB
バッファープール内のページに関する情報、特に、いっぱいになったときにバッファープールからどのページを削除するかを決定する各ページの順序を保持しています。 このページの定義は、このテーブルには BLOCK_ID
カラムの代わりに LRU_POSITION
カラムがある点を除き、INNODB_BUFFER_PAGE
の場合と同じです。
このクエリーは、employees.employees
テーブルの各ページによって占有されている LRU リスト内の特定の場所にある位置の数をカウントします。
Press CTRL+C to copymysql> SELECT COUNT(LRU_POSITION) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU WHERE TABLE_NAME='`employees`.`employees`' AND LRU_POSITION < 3072; +---------------------+ | COUNT(LRU_POSITION) | +---------------------+ | 548 | +---------------------+
例 15.10 INNODB_BUFFER_POOL_STATS テーブルのクエリー
INNODB_BUFFER_POOL_STATS
テーブルは、SHOW ENGINE INNODB STATUS
および InnoDB
バッファープールのステータス変数と同様の情報を提供します。
Press CTRL+C to copymysql> SELECT * FROM information_schema.INNODB_BUFFER_POOL_STATS \G *************************** 1. row *************************** POOL_ID: 0 POOL_SIZE: 8192 FREE_BUFFERS: 1 DATABASE_PAGES: 8173 OLD_DATABASE_PAGES: 3014 MODIFIED_DATABASE_PAGES: 0 PENDING_DECOMPRESS: 0 PENDING_READS: 0 PENDING_FLUSH_LRU: 0 PENDING_FLUSH_LIST: 0 PAGES_MADE_YOUNG: 15907 PAGES_NOT_MADE_YOUNG: 3803101 PAGES_MADE_YOUNG_RATE: 0 PAGES_MADE_NOT_YOUNG_RATE: 0 NUMBER_PAGES_READ: 3270 NUMBER_PAGES_CREATED: 13176 NUMBER_PAGES_WRITTEN: 15109 PAGES_READ_RATE: 0 PAGES_CREATE_RATE: 0 PAGES_WRITTEN_RATE: 0 NUMBER_PAGES_GET: 33069332 HIT_RATE: 0 YOUNG_MAKE_PER_THOUSAND_GETS: 0 NOT_YOUNG_MAKE_PER_THOUSAND_GETS: 0 NUMBER_PAGES_READ_AHEAD: 2713 NUMBER_READ_AHEAD_EVICTED: 0 READ_AHEAD_RATE: 0 READ_AHEAD_EVICTED_RATE: 0 LRU_IO_TOTAL: 0 LRU_IO_CURRENT: 0 UNCOMPRESS_TOTAL: 0 UNCOMPRESS_CURRENT: 0
比較のために、同じデータセットに基づいた SHOW ENGINE INNODB STATUS
の出力および InnoDB
バッファープールのステータス変数の出力を次に示します。
SHOW ENGINE INNODB STATUS
の出力の詳細は、セクション15.17.3「InnoDB 標準モニターおよびロックモニターの出力」を参照してください。
Press CTRL+C to copymysql> SHOW ENGINE INNODB STATUS \G ... ---------------------- BUFFER POOL AND MEMORY ---------------------- Total large memory allocated 137428992 Dictionary memory allocated 579084 Buffer pool size 8192 Free buffers 1 Database pages 8173 Old database pages 3014 Modified db pages 0 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 15907, not young 3803101 0.00 youngs/s, 0.00 non-youngs/s Pages read 3270, created 13176, written 15109 0.00 reads/s, 0.00 creates/s, 0.00 writes/s No buffer pool page gets since the last printout Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 8173, unzip_LRU len: 0 I/O sum[0]:cur[0], unzip sum[0]:cur[0] ...
ステータス変数の説明については、セクション5.1.10「サーバーステータス変数」を参照してください。
Press CTRL+C to copymysql> SHOW STATUS LIKE 'Innodb_buffer%'; +---------------------------------------+-------------+ | Variable_name | Value | +---------------------------------------+-------------+ | Innodb_buffer_pool_dump_status | not started | | Innodb_buffer_pool_load_status | not started | | Innodb_buffer_pool_resize_status | not started | | Innodb_buffer_pool_pages_data | 8173 | | Innodb_buffer_pool_bytes_data | 133906432 | | Innodb_buffer_pool_pages_dirty | 0 | | Innodb_buffer_pool_bytes_dirty | 0 | | Innodb_buffer_pool_pages_flushed | 15109 | | Innodb_buffer_pool_pages_free | 1 | | Innodb_buffer_pool_pages_misc | 18 | | Innodb_buffer_pool_pages_total | 8192 | | Innodb_buffer_pool_read_ahead_rnd | 0 | | Innodb_buffer_pool_read_ahead | 2713 | | Innodb_buffer_pool_read_ahead_evicted | 0 | | Innodb_buffer_pool_read_requests | 33069332 | | Innodb_buffer_pool_reads | 558 | | Innodb_buffer_pool_wait_free | 0 | | Innodb_buffer_pool_write_requests | 11985961 | +---------------------------------------+-------------+