10bet网址
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr)- 26.8Mb
PDF (A4)- 26.8Mb


14.14.5 InnoDB INFORMATION_SCHEMA バッファープールテーブル

InnoDBINFORMATION_SCHEMAバッファープールテーブルは、バッファープールのステータス情報、およびInnoDBバッファープール内のページに関するメタデータを提供します。これらのテーブルは MySQL 5.6.2、で導入され、あとで MySQL 5.5 (MySQL 5.5.28) および MySQL 5.1 (MySQL 5.1.66) にバックポートされました。

InnoDBINFORMATION_SCHEMAバッファープールテーブルには、下に一覧表示されているものが含まれます。

mysql >显示表从INFORMATION_SCHEMA喜欢我NNODB_BUFFER%'; +-----------------------------------------------+ | Tables_in_INFORMATION_SCHEMA (INNODB_BUFFER%) | +-----------------------------------------------+ | INNODB_BUFFER_PAGE_LRU | | INNODB_BUFFER_PAGE | | INNODB_BUFFER_POOL_STATS | +-----------------------------------------------+ 3 rows in set (0.00 sec)

テーブルの概要

  • 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テーブルのクエリーによって、大幅なパフォーマンスオーバーヘッドが導入される場合があります。クエリーによって発生する可能性のあるパフォーマンスへの影響を認識し、かつそれが許容可能であると判断していないかぎり、これらのテーブルを本番システムではクエリーしないでください。パフォーマンスへの影響を回避するために、調査しようとしている問題をテストインスタンスで再現し、テストインスタンスでクエリーを実行してください。

例 14.17 INNODB_BUFFER_PAGE テーブル内のシステムデータのクエリー

このクエリーは、TABLE_NAME値がNULLであるか、あるいはそのテーブル名にスラッシュ/またはピリオド.を含む (これはユーザー定義のテーブルを示します) ページを除外することによって、システムデータを含むページの概数を提供します。

SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE WHERE TABLE_NAME IS NULL OR (INSTR(TABLE_NAME, '/') = 0 AND INSTR(TABLE_NAME, '.') = 0); +----------+ | COUNT(*) | +----------+ | 1320 | +----------+ 1 row in set (0.12 sec)

このクエリーは、システムデータを含むページの概数、バッファープールページの総数、およびシステムデータを含むページの概略の割合 (%) を返します。

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 | +--------------+-------------+------------------------+ | 1320 | 8192 | 16 | +--------------+-------------+------------------------+ 1 row in set (0.15 sec)

バッファープール内のシステムデータのタイプは、PAGE_TYPE値をクエリーすることによって確認できます。たとえば、次のクエリーは、システムデータを含むページ間の 8 つの個別のPAGE_TYPE値を返します。

mysql> 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 | | UNDO_LOG | | UNKNOWN | | FILE_SPACE_HEADER | | INODE | | ALLOCATED | | TRX_SYSTEM | +-------------------+ 8 rows in set (0.05 sec)

例 14.18 INNODB_BUFFER_PAGE テーブル内のユーザーデータのクエリー

このクエリーは、TABLE_NAME値がNOT NULLおよびNOT LIKE '%INNODB_SYS_TABLES%'であるページをカウントすることによって、ユーザーデータを含むページの概数を提供します。

mysql> SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE WHERE TABLE_NAME IS NOT NULL AND TABLE_NAME NOT LIKE '%INNODB_SYS_TABLES%'; +----------+ | COUNT(*) | +----------+ | 6872 | +----------+ 1 row in set (0.06 sec)

このクエリーは、ユーザーデータを含むページの概数、バッファープールページの総数、およびユーザーデータを含むページの概略の割合 (%) を返します。

mysql> 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 | +------------+-------------+----------------------+ | 6872 | 8192 | 84 | +------------+-------------+----------------------+ 1 row in set (0.08 sec)

このクエリーは、バッファープール内のページを含むユーザー定義のテーブルを識別します。

mysql> 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` | +-------------------------+ 2 rows in set (0.09 sec)

例 14.19 INNODB_BUFFER_PAGE テーブル内のインデックスデータのクエリー

インデックスページに関する情報を取得するには、そのインデックスの名前を使用してINDEX_NAMEカラムをクエリーします。たとえば、次のクエリーは、employees.salariesテーブルで定義されているemp_noインデックスのページの数とページの合計データサイズを返します。

mysql >选择INDEX_NAME, COUNT(*)页面,圆的(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 | 1756 | 27 | +------------+-------+-----------------+ 1 row in set (0.07 sec)

このクエリーは、employees.salariesテーブルで定義されているすべてのインデックスのページの数とページの合計データサイズを返します。

mysql >选择INDEX_NAME, COUNT(*)页面,圆的(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 | 1756 | 27 | | PRIMARY | 4838 | 76 | +------------+-------+-----------------+ 2 rows in set (0.12 sec)

例 14.20 INNODB_BUFFER_PAGE_LRU テーブル内の LRU_POSITION データのクエリー

INNODB_BUFFER_PAGE_LRUテーブルは、InnoDBバッファープール内のページに関する情報、特に、いっぱいになったときにバッファープールからどのページを削除するかを決定する各ページの順序を保持しています。このページの定義は、このテーブルにはBLOCK_IDカラムの代わりにLRU_POSITIONカラムがある点を除き、INNODB_BUFFER_PAGEの場合と同じです。

このクエリーは、employees.employeesテーブルの各ページによって占有されている LRU リスト内の特定の場所にある位置の数をカウントします。

mysql> SELECT COUNT(LRU_POSITION) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU WHERE TABLE_NAME='`employees`.`employees`' AND LRU_POSITION < 3072; +---------------------+ | COUNT(LRU_POSITION) | +---------------------+ | 275 | +---------------------+ 1 row in set (0.04 sec)

例 14.21 INNODB_BUFFER_POOL_STATS テーブルのクエリー

INNODB_BUFFER_POOL_STATSテーブルは、SHOW ENGINE INNODB STATUSおよびInnoDBバッファープールのステータス変数と同様の情報を提供します。

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_POOL_STATS \G *************************** 1. row *************************** POOL_ID: 0 POOL_SIZE: 8192 FREE_BUFFERS: 1024 DATABASE_PAGES: 7029 OLD_DATABASE_PAGES: 2574 MODIFIED_DATABASE_PAGES: 0 PENDING_DECOMPRESS: 0 PENDING_READS: 0 PENDING_FLUSH_LRU: 0 PENDING_FLUSH_LIST: 0 PAGES_MADE_YOUNG: 173 PAGES_NOT_MADE_YOUNG: 3721891 PAGES_MADE_YOUNG_RATE: 0 PAGES_MADE_NOT_YOUNG_RATE: 0 NUMBER_PAGES_READ: 1075 NUMBER_PAGES_CREATED: 12594 NUMBER_PAGES_WRITTEN: 13525 PAGES_READ_RATE: 0 PAGES_CREATE_RATE: 0 PAGES_WRITTEN_RATE: 0 NUMBER_PAGES_GET: 27873240 HIT_RATE: 0 YOUNG_MAKE_PER_THOUSAND_GETS: 0 NOT_YOUNG_MAKE_PER_THOUSAND_GETS: 0 NUMBER_PAGES_READ_AHEAD: 576 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 1 row in set (0.00 sec)

比較のために、同じデータセットに基づいたSHOW ENGINE INNODB STATUSの出力およびInnoDBバッファープールのステータス変数の出力を次に示します。

SHOW ENGINE INNODB STATUSの出力の詳細は、セクション14.15.3「InnoDB 標準モニターおよびロックモニターの出力」を参照してください。

mysql> SHOW ENGINE INNODB STATUS \G ... ---------------------- BUFFER POOL AND MEMORY ---------------------- Total memory allocated 137363456; in additional pool allocated 0 Dictionary memory allocated 99725 Buffer pool size 8192 Free buffers 1024 Database pages 7029 Old database pages 2574 Modified db pages 0 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 173, not young 3721891 0.00 youngs/s, 0.00 non-youngs/s Pages read 1075, created 12594, written 13525 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: 7029, unzip_LRU len: 0 I/O sum[0]:cur[0], unzip sum[0]:cur[0] ...

ステータス変数の説明については、セクション5.1.6「サーバーステータス変数」を参照してください。

mysql> 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_pages_data | 7029 | | Innodb_buffer_pool_bytes_data | 115163136 | | Innodb_buffer_pool_pages_dirty | 0 | | Innodb_buffer_pool_bytes_dirty | 0 | | Innodb_buffer_pool_pages_flushed | 13525 | | Innodb_buffer_pool_pages_free | 1024 | | Innodb_buffer_pool_pages_misc | 139 | | Innodb_buffer_pool_pages_total | 8192 | | Innodb_buffer_pool_read_ahead_rnd | 0 | | Innodb_buffer_pool_read_ahead | 576 | | Innodb_buffer_pool_read_ahead_evicted | 0 | | Innodb_buffer_pool_read_requests | 27873240 | | Innodb_buffer_pool_reads | 500 | | Innodb_buffer_pool_wait_free | 0 | | Innodb_buffer_pool_write_requests | 11966441 | +---------------------------------------+-------------+ 17 rows in set (0.00 sec)