MySQL innodb_buffer_pool_size කොතරම් විශාල විය යුතුද?


187

5GB පමණ ප්‍රමාණයේ තනිකරම InnoDB වගු සහිත කාර්යබහුල දත්ත ගබඩාවක් මා සතුව ඇත. එස්එස්ඩී තැටි භාවිතා කරමින් ඩේබියන් සේවාදායකයක් මත දත්ත සමුදාය ක්‍රියාත්මක වන අතර මම උපරිම සම්බන්ධතා = 800 සකසා ඇති අතර එමඟින් සමහර විට සේවාදායකය සංතෘප්ත වී ඇඹරීමට සිදුවේ. තත්පරයට සාමාන්‍ය විමසුම 2.5K පමණ වේ. එබැවින් හැකි උපරිම සම්බන්ධතා සඳහා ඉඩ පහසුකම් සැලසීම සඳහා මතක භාවිතය ප්‍රශස්ත කිරීමට මට අවශ්‍යය.

Innodb_buffer_pool_size මුළු මතකයෙන් 80% ක් විය යුතු බවට යෝජනා මම දැක ඇත්තෙමි. අනෙක් අතට, මට මෙම අනතුරු ඇඟවීම සුසර-ප්‍රාථමික පිටපතෙන් ලැබේ:

Max Memory Ever Allocated : 91.97 G
Configured Max Per-thread Buffers : 72.02 G
Configured Max Global Buffers : 19.86 G
Configured Max Memory Limit : 91.88 G
Physical Memory : 94.58 G

මෙන්න මගේ වර්තමාන innodb විචල්යයන්:

| innodb_adaptive_flushing                          | ON                                                                                                                     |
| innodb_adaptive_hash_index                        | ON                                                                                                                     |
| innodb_additional_mem_pool_size                   | 20971520                                                                                                               |
| innodb_autoextend_increment                       | 8                                                                                                                      |
| innodb_autoinc_lock_mode                          | 1                                                                                                                      |
| innodb_buffer_pool_instances                      | 1                                                                                                                      |
| innodb_buffer_pool_size                           | 20971520000                                                                                                            |
| innodb_change_buffering                           | all                                                                                                                    |
| innodb_checksums                                  | ON                                                                                                                     |
| innodb_commit_concurrency                         | 0                                                                                                                      |
| innodb_concurrency_tickets                        | 500                                                                                                                    |
| innodb_data_file_path                             | ibdata1:10M:autoextend                                                                                                 |
| innodb_data_home_dir                              |                                                                                                                        |
| innodb_doublewrite                                | ON                                                                                                                     |
| innodb_fast_shutdown                              | 1                                                                                                                      |
| innodb_file_format                                | Antelope                                                                                                               |
| innodb_file_format_check                          | ON                                                                                                                     |
| innodb_file_format_max                            | Antelope                                                                                                               |
| innodb_file_per_table                             | ON                                                                                                                     |
| innodb_flush_log_at_trx_commit                    | 2                                                                                                                      |
| innodb_flush_method                               | O_DIRECT                                                                                                               |
| innodb_force_load_corrupted                       | OFF                                                                                                                    |
| innodb_force_recovery                             | 0                                                                                                                      |
| innodb_io_capacity                                | 200                                                                                                                    |
| innodb_large_prefix                               | OFF                                                                                                                    |
| innodb_lock_wait_timeout                          | 50                                                                                                                     |
| innodb_locks_unsafe_for_binlog                    | OFF                                                                                                                    |
| innodb_log_buffer_size                            | 4194304                                                                                                                |
| innodb_log_file_size                              | 524288000                                                                                                              |
| innodb_log_files_in_group                         | 2                                                                                                                      |
| innodb_log_group_home_dir                         | ./                                                                                                                     |
| innodb_max_dirty_pages_pct                        | 75                                                                                                                     |
| innodb_max_purge_lag                              | 0                                                                                                                      |
| innodb_mirrored_log_groups                        | 1                                                                                                                      |
| innodb_old_blocks_pct                             | 37                                                                                                                     |
| innodb_old_blocks_time                            | 0                                                                                                                      |
| innodb_open_files                                 | 300                                                                                                                    |
| innodb_purge_batch_size                           | 20                                                                                                                     |
| innodb_purge_threads                              | 0                                                                                                                      |
| innodb_random_read_ahead                          | OFF                                                                                                                    |
| innodb_read_ahead_threshold                       | 56                                                                                                                     |
| innodb_read_io_threads                            | 4                                                                                                                      |
| innodb_replication_delay                          | 0                                                                                                                      |
| innodb_rollback_on_timeout                        | OFF                                                                                                                    |
| innodb_rollback_segments                          | 128                                                                                                                    |
| innodb_spin_wait_delay                            | 6                                                                                                                      |
| innodb_stats_method                               | nulls_equal                                                                                                            |
| innodb_stats_on_metadata                          | ON                                                                                                                     |
| innodb_stats_sample_pages                         | 8                                                                                                                      |
| innodb_strict_mode                                | OFF                                                                                                                    |
| innodb_support_xa                                 | ON                                                                                                                     |
| innodb_sync_spin_loops                            | 30                                                                                                                     |
| innodb_table_locks                                | ON                                                                                                                     |
| innodb_thread_concurrency                         | 4                                                                                                                      |
| innodb_thread_sleep_delay                         | 10000                                                                                                                  |
| innodb_use_native_aio                             | ON                                                                                                                     |
| innodb_use_sys_malloc                             | ON                                                                                                                     |
| innodb_version                                    | 1.1.8                                                                                                                  |
| innodb_write_io_threads                           | 4                                                                                                                      |

අදාළ විය හැකි පැති සටහනක්: Drupal (වෙනම වෙබ් සේවාදායකයක වාඩි වී සිටින) වෙතින් විශාල පෝස්ට් එකක් (10KB ට වඩා වැඩි) දත්ත ගබඩාවට ඇතුළු කිරීමට උත්සාහ කරන විට, එය සදහටම පවතින අතර පිටුව නිවැරදිව නොපැමිණෙන බව මට පෙනේ.

මේවා සම්බන්ධයෙන්, මම කල්පනා කරන්නේ ප්‍රශස්ත කාර්ය සාධනය සඳහා මගේ innodb_buffer_pool_size විය යුත්තේ කුමක් ද යන්නයි. මෙම අවස්ථාව සඳහා මෙය සහ අනෙකුත් පරාමිතීන් ප්‍රශස්ත ලෙස සැකසීමට ඔබ කළ යෝජනා මම අගය කරමි.

Answers:


273

ඔබගේ innodb_buffer_pool_size අති විශාලයි. ඔබ එය සකසා ඇත 20971520000. ඒ 19.5135 GB. ඔබ සතුව ඇත්තේ 5GB InnoDB දත්ත සහ දර්ශක නම්, ඔබ සතුව තිබිය යුත්තේ 8GB පමණයි. මෙය පවා අධික විය හැකිය.

මෙන්න ඔබ කළ යුතු දේ. පළමුව මෙම විමසුම ක්‍රියාත්මක කරන්න

SELECT CEILING(Total_InnoDB_Bytes*1.6/POWER(1024,3)) RIBPS FROM
(SELECT SUM(data_length+index_length) Total_InnoDB_Bytes
FROM information_schema.tables WHERE engine='InnoDB') A;

මෙය ඔබට සියලු InnoDB දත්ත සහ දර්ශක මත පදනම්ව RIBPS, නිර්දේශිත InnoDB ස්වාරක්ෂක තටාක ප්‍රමාණය ලබා දෙනු ඇත, අතිරේක 60%.

උදාහරණයක් වශයෙන්

mysql>     SELECT CEILING(Total_InnoDB_Bytes*1.6/POWER(1024,3)) RIBPS FROM
    ->     (SELECT SUM(data_length+index_length) Total_InnoDB_Bytes
    ->     FROM information_schema.tables WHERE engine='InnoDB') A;
+-------+
| RIBPS |
+-------+
|     8 |
+-------+
1 row in set (4.31 sec)

mysql>

මෙම ප්‍රතිදානය සමඟ, ඔබ පහත සඳහන් දෑ /etc/my.cnf හි සැකසෙනු ඇත

[mysqld]
innodb_buffer_pool_size=8G

ලබන, service mysql restart

නැවත ආරම්භ කිරීමෙන් පසු, සතියක් හෝ දෙකක් සඳහා MySQL ධාවනය කරන්න. ඉන්පසු, මෙම විමසුම ක්‍රියාත්මක කරන්න:

SELECT (PagesData*PageSize)/POWER(1024,3) DataGB FROM
(SELECT variable_value PagesData
FROM information_schema.global_status
WHERE variable_name='Innodb_buffer_pool_pages_data') A,
(SELECT variable_value PageSize
FROM information_schema.global_status
WHERE variable_name='Innodb_page_size') B;

මේ මොහොතේ InnoDB ස්වාරක්ෂක තටාකයේ InnoDB දත්ත භාවිතා කරන සත්‍ය GB මතකය කොපමණ දැයි මෙය ඔබට ලබා දෙනු ඇත.

මම මේ ගැන මීට පෙර ලියා ඇත: innodb_buffer_pool සැකසිය යුත්තේ කුමක් ද සහ ඇයි ..?

DataGBනැවත සැකසීම, නැවත ආරම්භ කිරීම සහ සතියක් බලා සිටීම වෙනුවට ඔබට දැන් මෙම විමසුම ක්‍රියාත්මක කළ හැකිය .

මෙම අගය DataGBInnoDB ස්වාරක්ෂක තටාකය කොතරම් විශාල විය යුතුද යන්නට වඩා සමීපව සමාන වේ (ප්‍රතිශතය innodb_change_buffer_max_size හි දක්වා ඇත). මෙය ඔබ දැන් වෙන් කර ඇති 20000M ට වඩා බෙහෙවින් අඩු වනු ඇතැයි මට විශ්වාසයි. RAM හි ඉතිරිකිරීම් වැනි වෙනත් දේ සුසර කිරීම සඳහා භාවිතා කළ හැකිය

CAVEAT # 1

මෙය සටහන් කර ගැනීම ඉතා වැදගත් වේ: ඇතැම් විට, Innodb_buffer_pool_size සඳහා වටිනාකමට වඩා 10% ක් InnoDB ට අවශ්‍ය විය හැකිය . MySQL ප්‍රලේඛනය මේ පිළිබඳව පවසන දේ මෙන්න :

ඔබ මෙම අගය විශාල කරන තරමට, වගු වල දත්ත ප්‍රවේශ කිරීමට අඩු තැටිය I / O අවශ්‍ය වේ. විශේෂිත දත්ත සමුදා සේවාදායකයක, ඔබට මෙය යන්ත්‍රයේ භෞතික මතක ප්‍රමාණයෙන් 80% ක් දක්වා සැකසිය හැකිය. මෙම වෙනත් ගැටළු ඇති වුවහොත් මෙම අගය නැවත පරිමාණය කිරීමට සූදානම්ව සිටින්න:

භෞතික මතකය සඳහා වන තරඟය මෙහෙයුම් පද්ධතියේ පේජින් කිරීමට හේතු විය හැක.

InnoDB බෆර සහ පාලන ව්‍යුහයන් සඳහා අමතර මතකයක් වෙන් කර ඇති අතර එමඟින් වෙන් කරන ලද මුළු ඉඩ ප්‍රමාණය නිශ්චිත ප්‍රමාණයට වඩා 10% කින් වැඩි වේ.

ලිපින අවකාශය පරස්පර විය යුතුය, එය වින්ඩෝස් පද්ධතිවල ඩීඑල්එල් සහිත විශේෂිත ලිපිනවල පටවන ගැටළුවක් විය හැකිය.

ස්වාරක්ෂක තටාකය ආරම්භ කිරීමට ගතවන කාලය දළ වශයෙන් එහි ප්‍රමාණයට සමානුපාතික වේ. විශාල ස්ථාපනයන්හිදී, මෙම ආරම්භක කාලය සැලකිය යුතු ය. උදාහරණයක් ලෙස, නවීන ලිනක්ස් x86_64 සේවාදායකයක, 10GB බෆර් තටාකයක් ආරම්භ කිරීම ආසන්න වශයෙන් තත්පර 6 ක් ගතවේ. 8.9.1, “InnoDB ස්වාරක්ෂක තටාකය” බලන්න .

CAVEAT # 2

ඔබගේ පහත දැක්වෙන අගයන් මම දකිමි my.cnf

| innodb_io_capacity                                | 200 |
| innodb_read_io_threads                            | 4   |
| innodb_thread_concurrency                         | 4   |
| innodb_write_io_threads                           | 4   |

මෙම අංකය InnoDB බහු හරයකට ප්‍රවේශ වීමට බාධාවක් වනු ඇත

කරුණාකර පහත සඳහන් දෑ සකසන්න:

[mysqld]
innodb_io_capacity = 2000
innodb_read_io_threads = 64
innodb_thread_concurrency = 0
innodb_write_io_threads = 64

මම මීට පෙර DBA StackExchange හි ලියා ඇත

මම වඩාත් සංක්ෂිප්ත සූත්‍රයක් භාවිතා කරමින් සර්වර් ෆෝල්ට් හි මෙවැනි ප්‍රශ්නයකට පිළිතුරු දුන්නා :

SELECT CONCAT(CEILING(RIBPS/POWER(1024,pw)),SUBSTR(' KMGT',pw+1,1))
Recommended_InnoDB_Buffer_Pool_Size FROM
(
    SELECT RIBPS,FLOOR(LOG(RIBPS)/LOG(1024)) pw
    FROM
    (
        SELECT SUM(data_length+index_length)*1.1*growth RIBPS
        FROM information_schema.tables AAA,
        (SELECT 1.25 growth) BBB
        WHERE ENGINE='InnoDB'
    ) AA
) A;

1
මෙම විශිෂ්ට තනතුරට ස්තූතියි! ආරම්භ වන ඔබගේ සූත්‍රය SELECT (PagesData*PageSize)/POWER(1024,3) DataGB FROM...MySQL 5.7 හි පහත දෝෂය ජනනය කරයි: " 'INFORMATION_SCHEMA.GLOBAL_STATUS' විශේෂාංගය අක්‍රීය කර ඇත; 'show_compatibility_56' සඳහා වන ප්‍රලේඛනය බලන්න ". ඔබට අහම්බෙන් යාවත්කාලීන කළ අනුවාදයක් තිබේද?
බෙන්ජමින්

මට 307 RIBPS සහ 264G ලැබෙනවා. ඒ කියන්නේ මට 307GB RAM අවශ්‍යද?
E_Blue

තවත් 264G වගේ. නමුත් ඒ සඳහා ඔබට ප්‍රමාණවත් RAM ප්‍රමාණයක් තිබිය යුතුය, එසේ නොමැතිනම් ඔබේ RAM වලින් 80% ක්ම mysql වෙත ලබා දෙන්න.
sjas

6
En බෙන්ජමින්: MySQL 5.7.6 වන විට තොරතුරු_චේමා කාර්ය සාධනය_චෙමා සමඟ ඒකාබද්ධ වේ. එබැවින් එය ක්‍රියාත්මක කිරීම සඳහා විමසුමේ "තොරතුරු_චෙමා" "කාර්ය සාධනය_චෙමා" ලෙස වෙනස් කරන්න. මුලාශ්‍රය: dev.mysql.com/doc/refman/5.7/en/status-table.html
රැල්ෆ් බෝල්ටන්

1
Caveat: "අතිමහත්" සාපේක්ෂයි. එම වචනය ලියා ඇත්තේ මීට වසර ගණනාවකට පෙර 2012 දී ය.
රික් ජේම්ස්

13

මේ වගේ දෙයක්? භාවිතා කිරීම SHOW VARIABLESසහ SHOW GLOBAL STATUS:

ප්‍රකාශනය: innodb_buffer_pool_size / _ram
අර්ථය: InnoDB buffer_pool සඳහා භාවිතා කරන RAM හි%
නිර්දේශිත පරාසය: 60 ~ 80%

ප්‍රකාශනය: Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests
අර්ථය: තැටියට පහර දිය යුතු ඉල්ලීම් කියවන්න
නිර්දේශිත පරාසය: 0-2%
පරාසය ඉක්මවා ගියහොත් කුමක් කළ යුතුද: ඔබට ප්‍රමාණවත් නම් innodb_buffer_pool_size වැඩි කරන්න. RAM.

ප්‍රකාශනය: Innodb_pages_read / Innodb_buffer_pool_read_requests
අර්ථය: තැටියට පහර දිය යුතු ඉල්ලීම් කියවන්න
නිර්දේශිත පරාසය: 0-2%
පරාසය ඉක්මවා ගියහොත් කුමක් කළ යුතුද: ඔබට ප්‍රමාණවත් තරම් RAM ප්‍රමාණයක් තිබේ නම් innodb_buffer_pool_size වැඩි කරන්න.

ප්‍රකාශනය: Innodb_pages_written / Innodb_buffer_pool_write_requests
අර්ථය: තැටියට පහර දිය යුතු ඉල්ලීම් ලියන්න
නිර්දේශිත පරාසය: 0-15%
පරාසය ඉක්මවා ගියහොත් කුමක් කළ යුතුද: Innodb_buffer_pool_size පරීක්ෂා කරන්න

ප්‍රකාශනය: Innodb_buffer_pool_reads / Uptime
අර්ථය: කියවීම
නිර්දේශිත පරාසය: තත්පර 0-100 / තත්පර.
පරාසය ඉක්මවා ගියහොත් කුමක් කළ යුතුද : innodb_buffer_pool_size වැඩි කරන්න?

ප්‍රකාශනය: (Innodb_buffer_pool_reads + Innodb_buffer_pool_pages_flushed) / Uptime
අර්ථය: InnoDB I / O
නිර්දේශිත පරාසය: තත්පර 0-100 / තත්පර.
පරාසය ඉක්මවා ගියහොත් කුමක් කළ යුතුද : innodb_buffer_pool_size වැඩි කරන්න?

ප්‍රකාශනය: Innodb_buffer_pool_pages_flushed / Uptime
අර්ථය: ලිවීම (ෆ්ලෂ්)
නිර්දේශිත පරාසය: තත්පර 0-100 / තත්පර.
පරාසය ඉක්මවා ගියහොත් කුමක් කළ යුතුද : innodb_buffer_pool_size වැඩි කරන්න?

ප්‍රකාශනය: Innodb_buffer_pool_wait_free / Uptime
අර්ථය: බෆර්_පූල් හි නොමිලේ පිටු නොමැති විට කවුන්ටරය. එනම්, සියලුම පිටු අපිරිසිදු ය.
නිර්දේශිත පරාසය: තත්පර 0-1 / තත්පර.
පරාසය ඉක්මවා ගියහොත් කුමක් කළ යුතුද: පළමුව innodb_buffer_pool_size සාධාරණ ලෙස සකසා ඇති බවට වග බලා ගන්න; තවමත් කරදරයක් නම්, innodb_max_dirty_pages_pct අඩු කරන්න


ස්තූතියි @ රික් ලස්සන අදහස් දැක්වීමට. කුමක්ද innodb_buffer_pool_sizeයන්න නිශ්චිතව දක්වා අගය? තථ්‍ය ප්‍රමාණය හෝ වින්‍යාසගත එකක් ද?
ජෝකර්

1
okkoker - innodb_buffer_pool_sizeඋපරිම ප්‍රමාණය දක්වයි. සාමාන්‍ය සේවාදායකයක, "බෆර් තටාකය" කුඩා ලෙස ආරම්භ වන නමුත් ඉක්මනින් එම උපරිම ප්‍රමාණය දක්වා වර්ධනය වී එහි රැඳේ. සටහන: එය RAM (හෝ ආසන්න) වලට වඩා විශාල නම්, එය හුවමාරු වීමට තුඩු දෙයි, එය කාර්ය සාධනය සඳහා භයානක ය.
රික් ජේම්ස්

ඉතින් ඔබ කියන්නේ innodb_buffer_pool_size වැදගත් බවයි? :) හොඳ ප්‍රයෝජනවත් පිළිතුර
මිකාටෝ

ik මිකාටෝ - කාර්ය සාධනය සඳහා සුසර කිරීම ප්‍රධාන දෙයයි. ඉතා කුඩා -> තවත් I / O. RAM -> හුවමාරු කිරීම හෝ OOM බිඳවැටීමට වඩා විශාලයි.
රික් ජේම්ස්

7

ඔබගේ මාතෘකාව innodb_buffer_pool_size ගැන විමසයි, නමුත් එය සැබෑ ගැටළුව නොවන බව මම සැක කරමි. (රෝලන්ඩෝ අදහස් දැක්වූයේ ඔබ එය ප්‍රමාණවත් තරම් විශාල ලෙස සකසා ඇත්තේ මන්ද යන්නයි.)

මම උපරිම සම්බන්ධතා = 800 සකසා ඇති අතර සමහර විට එය සංතෘප්ත වන අතර සේවාදායකය නවත්වනු ඇත.

එය අපැහැදිලි ය. "නින්ද" මාදිලියේ භාවිතා කරන්නන් 800 ක් පද්ධතියට පාහේ ශුන්‍ය බලපෑමක් ඇති කරයි. සක්‍රීය නූල් 800 ක් ව්‍යසනයක් වනු ඇත. නූල් කීයක් "ධාවනය" වේද?

නූල් එකිනෙක අවහිර කරනවාද? ඩෙඩ්ලොක් ආදිය පිළිබඳ සමහර හෝඩුවාවන් සඳහා SHOW ENGINE INNODB STATUS බලන්න.

කිසියම් විමසුමක් මන්දගාමී තුළ පෙන්වන්නේද? අපි ඒවා ප්‍රශස්ත කරමු.

ඔබ භාවිතා කරන්නේ කුමන අනුවාදයද? එක්ස්ට්‍රාඩීබී (ඉනෝ ඩීබී වෙනුවට ආදේශ කිරීම) බහු හර භාවිතා කිරීමේ වඩා හොඳ කාර්යයක් කරයි. 5.6.7 ඊටත් වඩා හොඳ කාර්යයක් කරයි.

innodb_buffer_pool_instances - මෙය 8 දක්වා වෙනස් කරන්න (20G බෆර්_පූල් යැයි උපකල්පනය කරන්න); එය මුටෙක්ස් මතභේදය තරමක් අඩු කරනු ඇත.

ඔබ I / O බැඳී සිටිනවාද? නැතහොත් ඔබ CPU බැඳී සිටිනවාද? ඔබේ පිළිතුර අනුව විසඳුම් රැඩිකල් ලෙස වෙනස් වේ.

SSD - සියලුම ලොග් ලිපිගොනු SSD නොවන ධාවකවල තිබීම වඩා හොඳ විය හැකිය.


6

වැඩි මතකයක් සෑම විටම වඩා හොඳය, නමුත් මගේ අත්දැකීම් අනුව බොහෝ විට බෆර් තටාකයේ ප්‍රමාණය ඔබේ දත්ත ප්‍රමාණයට නොගැලපේ. බොහෝ වගු බොහෝ විට අක්‍රිය වී ඇති අතර, උපස්ථ වගු අවට පිහිටා ඇති බැවින් ඉනොඩ් බෆර් තටාකයේ ප්‍රමාණය ඔබට වඩා හොඳ දත්ත ප්‍රමාණයට ගැලපේ.

සක්‍රීය පිටු සඳහා ඔබ නියම කරන කාල රාමුව කාර්ය සාධනය කෙරෙහි බලපෑම් කරයි, නමුත් ප්‍රශස්ත ලක්ෂ්‍යයක් ඇත, එහිදී ඔබට විශාල ස්වාරක්ෂක ප්‍රමාණයක් සඳහා වැඩි කාර්ය සාධනයක් නොලැබෙනු ඇත. ඔබට එය තක්සේරු කිරීමට / ගණනය කිරීමට / මැනීමට හැකියshow engine innodb status

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.