5

スロー クエリ ログに、次のようなスロー クエリが表示されます。

# 時間: 121107 16:34:02
# ユーザー@ホスト: web_node[web_node] @ localhost [127.0.0.1]
# Thread_id: 34436186 スキーマ: test_db Last_errno: 0 Killed: 0
# Query_time: 1.413751 Lock_time: 0.000222 Rows_sent: 203 Rows_examined: 203 Rows_affected: 0 Rows_read: 203
# Bytes_sent: 7553 Tmp_tables: 0 Tmp_disk_tables: 0 Tmp_table_sizes: 0
# InnoDB_trx_id: 9B04384
タイムスタンプを設定 = 1352334842;
SELECT id, email FROM test_data WHERE id IN (13089576,3002681,3117763,1622233,2941590,12305279,1732672,2446772,3189510,13084725,4943929,5855071,6572137,2266261,3003496,2024860,3336832,13758671,6477694,1796684, 13001771,4690025,1071744,1017876,5175795,795988,1619821,2481819,2941090,4770802,13438250,3254708,2323402,526303,13219855,3313573,3190479,1733761,3300577,2941758,6474118,1733379,11523598,4205064,6521805, 2492903,1860388,3337093,5205317,1213970,5442738,12194039,1214203,12970536,3076611,3126152,3677156,5305021,2751587,4954875,875480,2105172,5309382,12981920,5204330,13729768,3254503,5030441,2680750,590661, 1338572,7272410,1860386,2567550,5434143,1918035,5329411,1683235,3254119,5175784,1855380,3336834,2102567,4749746,37269,3207031,6464336,2227907,2713471,3937600,2940442,2233821,5619141,5204711,5988803, 5050821,10109926,5226877,5050275,1874115,13677832,5338699,2423773,6432937,6443660,1990611,6090667,6527411,6568731,3254846,3414049,2011907,5180984,12178711,8558260,3130655,5864745,2059318,3480233,2104948,2387703,1939395,5356002,2681209,1184622, 1184456,10390165,510854,7983305,795991,2622393,4490187,9436477,5356051,2423464,5205318,1600499,13623229,3255205,12200483,6477706,3445661,5226284,1176639,13760962,2101681,6022818,12909371,1732457,2377496, 7260091,12191702,2492899,2630691,13047691,1684470,9382108,2233737,13117701,1796698,2535914,4941741,4565958,1100410,2321180,13080467,813342,4563877,4689365,2104756,1102802,2714488,3188947,1599770,1558291, 5592740,5233428,5204830,1574452,3188956,13693326,2102349,3704111,1748303,790889,9323280,4741494,2387900,5338213,3583795,2283942,3189482,3002296,4490123,3585020,962926,3481423,1600920,1682364,4693123, 6487778,2677582,2377195);6443660,1990611,6090667,6527411,6568731,3254846,3414049,2011907,5180984,12178711,8558260,3130655,5864745,2059318,3480233,2104948,2387703,1939395,5356002,2681209,1184622,1184456,10390165,510854,7983305, 795991,2622393,4490187,9436477,5356051,2423464,5205318,1600499,13623229,3255205,12200483,6477706,3445661,5226284,1176639,13760962,2101681,6022818,12909371,1732457,2377496,7260091,12191702,2492899,2630691, 13047691,1684470,9382108,2233737,13117701,1796698,2535914,4941741,4565958,1100410,2321180,13080467,813342,4563877,4689365,2104756,1102802,2714488,3188947,1599770,1558291,5592740,5233428,5204830,1574452, 3188956,13693326,2102349,3704111,1748303,790889,9323280,4741494,2387900,5338213,3583795,2283942,3189482,3002296,4490123,3585020,962926,3481423,1600920,1682364,4693123,6487778,2677582,2377195);6443660,1990611,6090667,6527411,6568731,3254846,3414049,2011907,5180984,12178711,8558260,3130655,5864745,2059318,3480233,2104948,2387703,1939395,5356002,2681209,1184622,1184456,10390165,510854,7983305, 795991,2622393,4490187,9436477,5356051,2423464,5205318,1600499,13623229,3255205,12200483,6477706,3445661,5226284,1176639,13760962,2101681,6022818,12909371,1732457,2377496,7260091,12191702,2492899,2630691, 13047691,1684470,9382108,2233737,13117701,1796698,2535914,4941741,4565958,1100410,2321180,13080467,813342,4563877,4689365,2104756,1102802,2714488,3188947,1599770,1558291,5592740,5233428,5204830,1574452, 3188956,13693326,2102349,3704111,1748303,790889,9323280,4741494,2387900,5338213,3583795,2283942,3189482,3002296,4490123,3585020,962926,3481423,1600920,1682364,4693123,6487778,2677582,2377195);2011907,5180984,12178711,8558260,3130655,5864745,2059318,3480233,2104948,2387703,1939395,5356002,2681209,1184622,1184456,10390165,510854,7983305,795991,2622393,4490187,9436477,5356051,2423464,5205318, 1600499,13623229,3255205,12200483,6477706,3445661,5226284,1176639,13760962,2101681,6022818,12909371,1732457,2377496,7260091,12191702,2492899,2630691,13047691,1684470,9382108,2233737,13117701,1796698,2535914, 4941741,4565958,1100410,2321180,13080467,813342,4563877,4689365,2104756,1102802,2714488,3188947,1599770,1558291,5592740,5233428,5204830,1574452,3188956,13693326,2102349,3704111,1748303,790889,9323280, 4741494,2387900,5338213,3583795,2283942,3189482,3002296,4490123,3585020,962926,3481423,1600920,1682364,4693123,6487778,2678125)778125;2011907,5180984,12178711,8558260,3130655,5864745,2059318,3480233,2104948,2387703,1939395,5356002,2681209,1184622,1184456,10390165,510854,7983305,795991,2622393,4490187,9436477,5356051,2423464,5205318, 1600499,13623229,3255205,12200483,6477706,3445661,5226284,1176639,13760962,2101681,6022818,12909371,1732457,2377496,7260091,12191702,2492899,2630691,13047691,1684470,9382108,2233737,13117701,1796698,2535914, 4941741,4565958,1100410,2321180,13080467,813342,4563877,4689365,2104756,1102802,2714488,3188947,1599770,1558291,5592740,5233428,5204830,1574452,3188956,13693326,2102349,3704111,1748303,790889,9323280, 4741494,2387900,5338213,3583795,2283942,3189482,3002296,4490123,3585020,962926,3481423,1600920,1682364,4693123,6487778,2678125)778125;10390165,510854,7983305,795991,2622393,4490187,9436477,5356051,2423464,5205318,1600499,13623229,3255205,12200483,6477706,3445661,5226284,1176639,13760962,2101681,6022818,12909371,1732457,2377496,7260091, 12191702,2492899,2630691,13047691,1684470,9382108,2233737,13117701,1796698,2535914,4941741,4565958,1100410,2321180,13080467,813342,4563877,4689365,2104756,1102802,2714488,3188947,1599770,1558291,5592740, 5233428,5204830,1574452,3188956,13693326,2102349,3704111,1748303,790889,9323280,4741494,2387900,5338213,3583795,2283942,3189482,3002296,4490123,3585020,962926,3481423,1600920,1682364,4693123,6487778, 2677582,2377195);10390165,510854,7983305,795991,2622393,4490187,9436477,5356051,2423464,5205318,1600499,13623229,3255205,12200483,6477706,3445661,5226284,1176639,13760962,2101681,6022818,12909371,1732457,2377496,7260091, 12191702,2492899,2630691,13047691,1684470,9382108,2233737,13117701,1796698,2535914,4941741,4565958,1100410,2321180,13080467,813342,4563877,4689365,2104756,1102802,2714488,3188947,1599770,1558291,5592740, 5233428,5204830,1574452,3188956,13693326,2102349,3704111,1748303,790889,9323280,4741494,2387900,5338213,3583795,2283942,3189482,3002296,4490123,3585020,962926,3481423,1600920,1682364,4693123,6487778, 2677582,2377195);1684470,9382108,2233737,13117701,1796698,2535914,4941741,4565958,1100410,2321180,13080467,813342,4563877,4689365,2104756,1102802,2714488,3188947,1599770,1558291,5592740,5233428,5204830,1574452,3188956, 13693326,2102349,3704111,1748303,790889,9323280,4741494,2387900,5338213,3583795,2283942,3189482,3002296,4490123,3585020,962926,3481423,1600920,1682364,4693123,6487778,2677582,2377195);1684470,9382108,2233737,13117701,1796698,2535914,4941741,4565958,1100410,2321180,13080467,813342,4563877,4689365,2104756,1102802,2714488,3188947,1599770,1558291,5592740,5233428,5204830,1574452,3188956, 13693326,2102349,3704111,1748303,790889,9323280,4741494,2387900,5338213,3583795,2283942,3189482,3002296,4490123,3585020,962926,3481423,1600920,1682364,4693123,6487778,2677582,2377195);

SQL_NO_CACHE を使用してプロファイラーで低速クエリを実行すると、次のように表示されます

セットで 203 行 (0.03 秒)

クエリ 33 のプロファイルを表示します。
+------------------------------------+----------+
| | ステータス | 期間 |
+------------------------------------+----------+
| | 開始 | 0.000187 |
| | パーミッションの確認 | 0.000012 |
| | テーブルを開く | 0.000034 |
| | システムロック | 0.000016 |
| | 初期化 | 0.000087 |
| | 最適化 | 0.000024 |
| | 統計 | 0.028694 |
| | 準備中 | 0.000074 |
| | 実行中 | 0.000005 |
| | データの送信 | 0.001596 |
| | 終了 | 0.000009 |
| | クエリ終了 | 0.000008 |
| | テーブルを閉じる | 0.000014 |
| | アイテム解放 | 0.001600 |
| | スロークエリのロギング | 0.000007 |
| | 片付け | 0.000011 |
+------------------------------------+----------+

Explain を使用してクエリを実行すると、次のように表示されます

+----+-------------+------------------+-------+--- ---------------+----------+---------+------+------ + --------------------------+
| | ID | select_type | テーブル | タイプ | 可能な_キー | キー | key_len | 参照 | 行 | 行 エクストラ |
+----+-------------+------------------+-------+--- ---------------+----------+---------+------+------ + --------------------------+
| | 1 | シンプル | テストデータ | 範囲 | PRIMARY,id_email | id_email | 4 | ヌル | 203 | where を使用します。インデックスの使用 |
+----+-------------+------------------+-------+--- ---------------+----------+---------+------+------ + --------------------------+

作成テーブルは次のようになります

CREATE TABLE `test_data` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(254) DEFAULT NULL,
  `domain` varchar(254) DEFAULT NULL,
  `age` smallint(6) DEFAULT NULL,
  `性別` tinyint(1) DEFAULT NULL,
  `location_id` int(11) unsigned DEFAULT NULL,
  `created` タイムスタンプ NOT NULL DEFAULT '0000-00-00 00:00:00',
  `unistall_date` タイムスタンプ NOT NULL DEFAULT '0000-00-00 00:00:00',
  `subscription_date` タイムスタンプ NOT NULL DEFAULT '0000-00-00 00:00:00',
  `active` tinyint(1) DEFAULT '1',
  主キー (`id`)、
  UNIQUE KEY `email` (`email`),
  KEY `ドメイン` (`ドメイン`),
  KEY `id_email` (`id`,`email`),
  KEY `email_id` (`email`,`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13848530 DEFAULT CHARSET=utf8

メールアドレスのリストからIDとメールを選択して定期的に実行される別のクエリがあるため、メール、IDキー、メールアドレスは一意である必要があるため、それが一意のキーである理由です。テーブルには最大 1,400 万行しかありません

メモリとスワッピングのためにインデックスが大きくなる可能性があると思いましたが、ボックスには8ギガのRAMがあります。

SELECT table_schema "データベース名", SUM( data_length + index_length) / 1024 / 1024 "データベース サイズ (MB)", SUM( index_length) / 1024 / 1024 "インデックス サイズ (MB)" FROM information_schema.TABLES GROUP BY table_schema;
+--------------------+-------------------------------------+----- --------------+
| | データベース名 | データベース サイズ (MB) | インデックス サイズ (MB) |
+--------------------+-------------------------------------+----- --------------+
| | メトリック | 3192.50000000 | 1594.42187500 |
| | データ | 8096.48437500 | 5639.51562500 |
| | 生データ | 6000.35937500 | 745.07812500 |
| | 情報スキーマ | 0.00878906 | 0.00878906 |
| | mysql | 0.04319191 | 0.04101563 |
| | パフォーマンススキーマ | 0.00000000 | 0.00000000 |
+--------------------+-------------------------------------+----- --------------+

my.cnf ファイルで innodb_file_per_table=1 を設定すると、問題が解決したようです。

これにより実行時間が改善されました。私の理解では、テーブルごとに 1 つのファイルを持つということは、ディスク ニードルがそれほど長い距離を移動する必要がないことを意味します。

質問

  1. インデックスを使用してクエリを評価できる場合、 innodb_file_per_table=1 を設定するとパフォーマンスが向上するのはなぜですか
  2. キャッシュを使用せずにプロファイラーに対してクエリを実行すると、クエリが遅くならないのはなぜですか?
  3. 主キーは (id, email) にする必要がありますか?

アップデート

もともと /etc/my.cnf ファイルがなかったので、次のファイルを作成しました

[mysqld]
サーバー ID=1
最大接続数=1500
key_buffer_size=50M
query_cache_limit=16M
query_cache_size=256M
thread_cache=16
table_open_cache=4096
sort_buffer_size=512K
join_buffer_size=8M
read_buffer_size=8M
skip_name_resolve=1
thread_cache_size=256
innodb_buffer_pool_size=6G
innodb_buffer_pool_instances=1
innodb_thread_concurrency=96
innodb_additional_mem_pool_size=32M
innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=0
innodb_log_file_size=256M
innodb_flush_method=O_DIRECT
innodb_file_per_table=1
net_read_timeout=15
net_write_timeout=30
log-bin=mysql-bin
sync_binlog=0
datadir=/var/lib/mysql
4

1 に答える 1

3

innodb_log_buffer のデータが多すぎます。

次の値は何ですか:

innodb_buffer_pool_size 
innodb_log_file_size 

すべての InnoDB はメモリ内で実行する必要があります。ファイルを分割すると、より効率的に実行されます。これは、1 つの大きなファイルがデータをスキャンするのに時間がかかるため、ディスクの読み取りと書き込みが少なくなり、メモリのスワップ インとスワップ アウトが行われるためです。

innodb_buffer_pool_size が MySQL がメモリにロードするメモリの量を制限しているため、スワッピングではありません。

問題を解決する唯一の方法は、メモリを増やして、すべての innodb テーブルとインデックスに十分な innodb_buffer_pool_size を割り当てることです。

于 2012-11-09T01:21:57.807 に答える