אופטימיזציה מקצועית של אינדקסים במסד נתונים עבור 1C-Bitrix

אנו רואים לעתים קרובות פרויקטים שבהם שאילתת קטלוג על 50,000 מוצרים לוקחת 4 שניות במקום 40 אלפיות השנייה. `EXPLAIN` מציג `ALL` במקום `ref` — הטבלה נסרקת לחלוטין. זהו סימפטום קלאסי: אינדקסים לא נוספו לאחר גידול בנתונים או נמחקו בטעות במהלך עדכוני סכמה. T
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
אופטימיזציה מקצועית של אינדקסים במסד נתונים עבור 1C-Bitrix
פשוט
~1 יום

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1456
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    פיתוח אתר לחברת FIXPER
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    760
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    879
  • image_crm_dolbimby_434_0.webp
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1162

לעתים קרובות אנו רואים פרויקטים שבהם שאילתת קטלוג על 50,000 מוצרים אורכת 4 שניות במקום 40 אלפיות השנייה. EXPLAIN מציג ALL במקום ref — הטבלה נסרקת לחלוטין. זהו סימפטום קלאסי: אינדקסים לא נוספו לאחר גידול בנתונים או שנמחקו בטעות במהלך עדכוני סכמה. חשיבות האינדקסים מתועדת היטב בוויקיפדיה. במשך למעלה מ-10 שנות עבודה, למדנו לזהות בעיות כאלה תוך דקות ולחסל אותן עם תוצאות מובטחות.

הבעיה מחמירה בשל העובדה שביטריקס משתמשת בסכמה מורכבת עם בלוקי מידע, שבה הנתונים מפוזרים על פני עשרות טבלאות. ללא אינדקסים מתאימים, אפילו מסנן מאפיינים פשוט הופך לסריקה מלאה של מיליוני שורות. אנו רואים זאת בכל פרויקט שני: האתר עבד היטב עד 10,000 מוצרים, אך לאחר 50,000 החל להאט. בעלים לעתים קרובות מנסים לפתור את הבעיה עם מטמון או שדרוג שרת, אך שורש הבעיה הוא אינדקסים חסרים.

אילו אינדקסים קריטיים עבור בלוקי מידע?

מבנה האחסון של נתוני בלוקי המידע מפוצל על פני מספר טבלאות. להלן העיקריות עם אינדקסים מומלצים:

טבלה מטרה שדות מפתח לאינדקס
b_iblock_element רשומות אלמנטים ראשיים IBLOCK_ID, ACTIVE, DATE_ACTIVE_FROM (מרוכב)
b_iblock_element_property ערכי מאפיינים IBLOCK_ID, IBLOCK_PROPERTY_ID, VALUE; IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID
b_iblock_section סעיפים IBLOCK_ID, LEFT_MARGIN, RIGHT_MARGIN
b_catalog_price מחירי קטלוג מסחרי CATALOG_GROUP_ID, PRICE, CURRENCY
b_search_content אינדקס חיפוש MODULE_ID, ITEM_ID

בסביבת ייצור, b_iblock_element_property מגיע בקלות ל-10-30 מיליון שורות. שאילתת מסנן לפי שני מאפיינים ללא אינדקס גורמת לסריקה מלאה של שתי הטבלאות, מה שגורם לעיכובים של שניות באופן מיידי.

כיצד לאבחן שאילתות איטיות?

ראשית, הפעל את יומן השאילתות האיטיות ב-MySQL/MariaDB:

SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log'; 

במקביל, השתמש בפרופילינג של ביטריקס באמצעות קבועים ב-SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log'; :

define("DBDebug", true); define("DBDebugToFile", true); 

היומן נכתב אל dbconn.php. הפעל אותו לזמן קצר בסביבת ייצור — הקובץ גדל באופן מיידי. נתח את 10 השאילתות האיטיות ביותר וסקור את התוכניות שלהן באמצעות define("DBDebug", true); define("DBDebugToFile", true); .

כיצד אנו מוסיפים אינדקסים חסרים?

בדוק אם קיימים אינדקסים באמצעות:

SHOW INDEX FROM b_iblock_element; SHOW INDEX FROM b_iblock_element_property; 

הוסף את כל האינדקסים הדרושים בבת אחת:

ALTER TABLE b_iblock_element ADD INDEX ix_ie_iblock_active_date (IBLOCK_ID, ACTIVE, DATE_ACTIVE_FROM); ALTER TABLE b_iblock_element_property ADD INDEX ix_iep_iblock_prop_val (IBLOCK_ID, IBLOCK_PROPERTY_ID, VALUE), ADD INDEX ix_iep_element_prop (IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID); ALTER TABLE b_catalog_price ADD INDEX ix_cp_catalog_price (CATALOG_GROUP_ID, PRICE, CURRENCY); ALTER TABLE b_catalog_store_product ADD INDEX ix_csp_product_store (PRODUCT_ID, STORE_ID); ALTER TABLE b_stat_phrase_date ADD INDEX ix_spd_date_phrase (DATE1, PHRASE_ID); 

כל השינויים מבוצעים באמצעות bitrix/modules/main/tools/bx_sql.log על טבלאות הגדולות מ-1 GB כדי למנוע נעילות.

מדוע מטמון אינו פותר את הבעיה?

מטמון מסתיר את הסימפטומים אך אינו מרפא את הסיבה. עם כל ריקון מטמון או ביקור ראשון ממשתמש חדש, האתר יאט שוב. רק אינדקסים מוגדרים כראוי מבטיחים ביצועים יציבים תחת כל עומס.

תחזוקת אינדקסים היא קריטית לביצועים

אתרי ביטריקס עם מודול EXPLAIN צוברים מיליוני שורות בטבלאות SHOW INDEX FROM b_iblock_element; SHOW INDEX FROM b_iblock_element_property; . לאחר מחיקות המוניות דרך לוח הניהול, אינדקסים הופכים למפוצלים, וסטטיסטיקת התפלגות הנתונים הופכת למיושנת. אנו מנתחים פיצול:

SELECT TABLE_NAME, ROUND(DATA_FREE/1024/1024, 2) AS free_mb, ROUND(DATA_LENGTH/1024/1024, 2) AS data_mb FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'bitrix_db' AND DATA_FREE > 10485760 ORDER BY DATA_FREE DESC; 

כאשר הפיצול עולה על 20% מהנתונים, אנו מריצים ALTER TABLE b_iblock_element ADD INDEX ix_ie_iblock_active_date (IBLOCK_ID, ACTIVE, DATE_ACTIVE_FROM); ALTER TABLE b_iblock_element_property ADD INDEX ix_iep_iblock_prop_val (IBLOCK_ID, IBLOCK_PROPERTY_ID, VALUE), ADD INDEX ix_iep_element_prop (IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID); ALTER TABLE b_catalog_price ADD INDEX ix_cp_catalog_price (CATALOG_GROUP_ID, PRICE, CURRENCY); ALTER TABLE b_catalog_store_product ADD INDEX ix_csp_product_store (PRODUCT_ID, STORE_ID); ALTER TABLE b_stat_phrase_date ADD INDEX ix_spd_date_phrase (DATE1, PHRASE_ID); (בנייה מחדש מלאה ב-InnoDB) או משתמשים ב-pt-online-schema-change למצב מקוון.

סימפטומים אופייניים ופתרונות

סימפטום סיבה סבירה פתרון
טעינת קטלוג >3 שניות אינדקס חסר על IBLOCK_ID+ACTIVE הוסף אינדקס מרוכב
מסנן מאפיינים איטי אין אינדקס על IBLOCK_PROPERTY_ID+VALUE הוסף אינדקס
עומס CPU גבוה במהלך בחירות סריקות טבלה מלאות בדוק EXPLAIN, הוסף אינדקסים חסרים
ירידה חדה בביצועים לאחר ניקוי סטטיסטיקות פיצול אינדקסים הרץ OPTIMIZE TABLE

מה כלול בעבודה שלנו?

  • ביקורת על אינדקסים קיימים ותוכניות שאילתות — זיהוי צווארי בקבוק.
  • הוספה ואופטימיזציה של אינדקסים — סוהר, עם בדיקות עומס.
  • אוטומציה של תחזוקה — הגדרת סוכן statistic שבועי.
  • תיעוד — רישום כל השינויים, סכמת אינדקסים והמלצות.
  • תמיכה לאחר הפרויקט — מענה לשאלות, התאמות במידת הצורך.

אנו מבטיחים שלאחר הכוונון שלנו, זמן הביצוע של שאילתות טיפוסיות יקטן פי 10–100. אנו מאשרים זאת עם תוצאות בדיקות לפני/אחרי. לדוגמה, בפרויקט אחד עם קטלוג של 200,000 מוצרים, הפחתנו את זמן טעינת העמוד הראשי מ-8 שניות ל-0.2 שניות — פי 40 מהר יותר מכל אופטימיזציית מטמון. החיסכון במשאבי שרת הסתכם בכ-150,000 רובל לחודש, ועלות השכרת השרת ירדה ב-40%.

דוגמת מקרה מבחן קטלוג של 200,000 מוצרים: העמוד הראשי נטען ב-8 שניות. סיבה — אינדקס חסר על `IBLOCK_ID` ו-`ACTIVE` ב-`b_iblock_element`. לאחר הוספתו, זמן התגובה ירד ל-0.2 שניות. עומס ה-CPU ירד ב-60%.

לוח זמנים ועלות

משך העבודה המשוער — בין 2 ל-5 ימי עסקים, תלוי בנפח הנתונים ובמורכבות הסכמה. העלות מחושבת באופן אישי לאחר ביקורת. אנו מצטטים את המחיר בשקיפות לפני תחילת העבודה ואינם מסתירים אפשרויות נוספות.

הזמן ביקורת אינדקסים — נזהה צווארי בקבוק תוך יום אחד. קבל ייעוץ: נעריך את הפרויקט שלך בחינם. ניסיון של 10+ שנים ו-50+ פרויקטים של אופטימיזציית מסדי נתונים מדברים בעד עצמם.

אתה יכול גם ללמוד את התיעוד הרשמי של MySQL על אינדקסים להבנה מעמיקה יותר.