Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  InnoDB INFORMATION_SCHEMA バッファープールテーブル

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

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

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

mysql> 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                      |
+-----------------------------------------------+
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> 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     |  1756 |              27 |
+------------+-------+-----------------+
1 row in set (0.07 sec)

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

mysql> 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     |  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)


User Comments
Sign Up Login You must be logged in to post a comment.