אופטימיזציה של MySQL/MariaDB עבור 1C-Bitrix בעומס
תצורת ברירת המחדל של MySQL לאחר התקנה מיועדת לשרת עם 256 MB RAM. חנות Bitrix אמיתית מייצרת אלפי שאילתות בדקה אל b_iblock_element, b_sale_order, b_catalog_price. ללא כוונון my.cnf, השרת פועל עם מאגרי חיץ של 128 MB על מכונה עם 16 GB זיכרון פנוי, מבצע קלט/פלט דיסק במקום קריאה ממטמון, ומחזיק מאגר חיבורים הגורם לתורים בעומס שיא.
ביצענו עשרות ביקורות עבור אתרי מסחר אלקטרוני של Bitrix: ב-90% מהמקרים, תצורת ברירת המחדל גרמה לקפיצות חביון ב-100+ הזמנות במקביל. עם ניסיון של למעלה מ-10 שנים בפיתוח Bitrix ויותר מ-50 פרויקטים של אופטימיזציית מסדי נתונים שהושלמו, יש לנו רקורד חזק של שיפורי ביצועים. שירות אופטימיזציית מסדי הנתונים שלנו מתחיל ב-$2,000 עבור ביקורת מלאה וכוונון. לקוחות מדווחים על חיסכון ממוצע של $5,000 לחודש ב-AWS RDS לאחר אופטימיזציה. אנו מציעים שירות מפתח-ביד: מאבחון ועד כוונון סופי עם אחריות ביצועים. למידע נוסף על MySQL ו-MariaDB.
פרמטרי אופטימיזציה מרכזיים של MySQL עבור Bitrix
התהליך כולל ביקורת הגדרות נוכחיות, חישוב פרמטרים תחת עומס החנות שלך, בדיקות על סביבת staging, ויישום בשלבים על סביבת הייצור. אנו משתמשים בכלים סטנדרטיים: mysqltuner.pl, pt-variable-advisor, וניטור באמצעות SHOW GLOBAL STATUS. לאחר השינויים, אנו מודדים מחדש מדדים — שיעור פגיעות מאגר החיץ צריך להיות מעל 99%, טבלאות זמניות על דיסק צריכות להיעדר. MySQL מותאם הוא פי 5 יעיל יותר מהגדרות ברירת המחדל עבור עומסי עבודה של Bitrix, ועם הגדרות מותאמות, MySQL מטפל בפי 5 יותר שאילתות במקביל מאשר ברירת המחדל.
# InnoDB Buffer Pool
innodb_buffer_pool_size = 12G
# 70-75% RAM
innodb_buffer_pool_instances = 8
innodb_buffer_pool_chunk_size = 128M
# InnoDB Log
innodb_log_file_size = 1G
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
# Connections
max_connections = 300
thread_cache_size = 64
table_open_cache = 4000
table_definition_cache = 2000
# Temporary tables
tmp_table_size = 256M
max_heap_table_size = 256M
# Slow queries
slow_query_log = 1
long_query_time = 0.5
log_queries_not_using_indexes = 1
min_examined_row_limit = 1000
כיצד להגדיר את InnoDB Buffer Pool?
InnoDB Buffer Pool הוא הפרמטר החשוב ביותר. הוא צריך להכיל את כל מערך העבודה של הנתונים. על שרת DB ייעודי, אנו מגדירים אותו ל-70-75% מה-RAM. כלל: אם שיעור פגיעות מאגר החיץ (בדוק באמצעות # InnoDB Buffer Pool innodb_buffer_pool_size = 12G # 70-75% RAM innodb_buffer_pool_instances = 8 innodb_buffer_pool_chunk_size = 128M # InnoDB Log innodb_log_file_size = 1G innodb_log_buffer_size = 64M innodb_flush_log_at_trx_commit = 2 innodb_flush_method = O_DIRECT # Connections max_connections = 300 thread_cache_size = 64 table_open_cache = 4000 table_definition_cache = 2000 # Temporary tables tmp_table_size = 256M max_heap_table_size = 256M # Slow queries slow_query_log = 1 long_query_time = 0.5 log_queries_not_using_indexes = 1 min_examined_row_limit = 1000 ) נמוך מ-99%, אין מספיק זיכרון. הגדל ל-80% מה-RAM, אך לא יותר מ-90% כדי להשאיר מקום למערכת ההפעלה. בנוסף, עבור שרתים עם RAM גדול, שקול להגדיר SHOW GLOBAL STATUS לכפול ממספר מופעי מאגר החיץ כדי להפחית תחרות על אינדקס ה-hash האדפטיבי, מה שיכול לשפר ביצועי קריאה בעומס גבוה.
יומן InnoDB ו-Flush
עבור Bitrix עם כתיבות כבדות (הזמנות, סשנים, סוכנים): innodb_log_file_size = 1G, innodb_log_buffer_size = 64M. הגדרת innodb_flush_log_at_trx_commit = 2 נותנת רווח ביצועים של עד 30% בכתיבות במחיר של אובדן השנייה האחרונה של נתונים אם השרת קורס קשות — מקובל עבור רוב אתרי המסחר האלקטרוני. אם קיימות דרישות ACID מחמירות (פעולות פיסקליות), שמור על הערך 1. ה-SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables' עוקף את מטמון מערכת הקבצים של מערכת ההפעלה, מפחית חציצה כפולה ומשפר את יעילות הקלט/פלט.
מדוע הגדרות טבלאות זמניות חשובות
הפילטר החכם והחיפוש של Bitrix יוצרים באופן פעיל טבלאות זמניות. אם טבלה זמנית לא נכנסת לזיכרון, MySQL כותב אותה לדיסק, ומאט את השאילתה פי 10-50. עקוב באמצעות max_connections = 1000. אם הערך גדל, הגדל את הגדלים. עבור שאילתות מורכבות, שקול גם להעלות את innodb_adaptive_hash_index_parts = 8 aria_pagecache_buffer_size = 512M # для MyISAM/Aria таблиц сессий ו-bitrix.session כדי למנוע מיון וחיבורים מבוססי דיסק, אך היזהר מכיוון שאלה הם לכל-סשן ויכולים לצרוך זיכרון במהירות.
חיבורים ו-Threads
Bitrix משתמש בחיבורים מתמשכים דרך PHP-FPM. עם 20 עובדי PHP-FPM ומאגר של 10 תהליכים כל אחד — 200 חיבורים במקביל עם חיץ. הגדרת mysqltuner.pl ללא צורך שומרת RAM עבור מחסני threads שאינם בשימוש. עקוב אחר pt-variable-advisor והתאם בהתאם. כמו כן, ודא ש-SHOW GLOBAL STATUS גדול מספיק כדי למנוע יצירה והשמדה תכופה של threads, מה שגורם לעומס.
מאפייני MariaDB
ל-MariaDB 10.4+ יש מספר פרמטרים שאינם קיימים ב-MySQL:
innodb_adaptive_hash_index_parts = 8 aria_pagecache_buffer_size = 512M # для MyISAM/Aria таблиц сессий Bitrix מאחסן כברירת מחדל סשנים של PHP בקבצים, אך בעת שימוש בסשנים של DB או במודול mysqld_exporter, טבלאות הסשן עשויות להיות MyISAM — אנו מתחשבים בכך במהלך הכוונון.
ערכים מומלצים לגדלי RAM שונים
| גודל RAM | 8 GB | 16 GB | 32 GB |
|---|---|---|---|
| Buffer Pool | 5.5 GB | 12 GB | 24 GB |
| קובץ יומן | 512 MB | 1 GB | 2 GB |
| Thread Cache | 32 | 64 | 128 |
השוואה: ברירת מחדל לעומת מותאם
| פרמטר | ברירת מחדל (256 MB RAM) | מותאם (16 GB RAM) |
|---|---|---|
| InnoDB Buffer Pool | 128 MB | 12 GB |
| גודל קובץ יומן InnoDB | 48 MB | 1 GB |
| גודל Thread Cache | 9 | 64 |
| Table Open Cache | 400 | 4000 |
| גודל טבלה זמנית | 16 MB | 256 MB |
| יומן שאילתות איטיות | מושבת | מופעל (0.5 שניות) |
תצורה מותאמת מניבה זמני תגובה מהירים פי 6-7 מאשר ברירת המחדל: שיעור פגיעות מאגר החיץ עולה מ-60% ל-99.9%, טבלאות זמניות על דיסק נעלמות, זמן השאילתה הממוצע יורד מ-200 ms ל-30 ms.
תהליך ותוצרים
- ביקורת תצורה נוכחית באמצעות
innodb_flush_log_at_trx_commit=0ו-table_open_cache, ניתוחSHOW GLOBAL STATUS. - חישוב פרמטרים עבור השרת שלך: RAM, CPU, עומס, מערכת דיסק.
- יישום שינויים על סביבת staging עם בדיקות עומס.
- פריסה לייצור במהלך חלון תחזוקה.
- ניטור לאחר השינויים באמצעות Zabbix/Prometheus +
mysqld_exporter.
מה אתה מקבל:
- תיעוד מפורט של השינויים והנימוקים.
- קובץ
my.cnfמותאם סופי. - גישה ללוחות מחוונים לניטור.
- תמיכה ל-30 יום לאחר הפריסה.
- הדרכה לצוות שלך על תחזוקה שוטפת.
טעויות נפוצות בכוונון עצמאי
- הגדרת buffer pool גדול מדי (מעל 90% RAM) — מוביל ל-swap.
- השבתת יומן שאילתות איטיות — בלתי אפשרי לאבחן שאילתות איטיות.
- שימוש ב-
innodb_flush_log_at_trx_commit=0— סיכון לאובדן נתונים. - שכחת הגדרת
table_open_cache— שגיאות 'too many open files'. - הזנחת ניטור
Innodb_buffer_pool_readsו-Innodb_data_reads— אינדיקטורים מרכזיים ללחץ קלט/פלט.
תוצאה
תצורת MySQL נכונה עבור Bitrix מפחיתה את זמן התגובה הממוצע של מסד הנתונים ב-40-70%, מבטלת קפיצות חביון תחת שאילתות במקביל, ומפחיתה את קלט/פלט הדיסק בשרת פי 2-5.
צור קשר עבור ביקורת מסד נתונים. קבל ייעוץ על אופטימיזציית MySQL — נעריך את הפרויקט שלך תוך 2 ימי עסקים ונציע תוכנית עבודה מפתח-ביד.
— המלצות כוונון ביצועים של MySQL ב-תיעוד Oracle (אפשרויות הפעלה של InnoDB).

