לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 29-06-2011, 16:45
  טוארג טוארג אינו מחובר  
 
חבר מתאריך: 13.02.09
הודעות: 365
ביצועים של addBatch עם MySQL ו JDBC

בפרוייקט מסויים אנחנו עובדים בסביבת לינוקס, ג'אווה, MySQL, JDBC. ביצועים טובים הם קריטיים. עבור הרכיב שמוסיף ומעדכן רשומות בכמויות אנחנו מתלבטים בין שתי אפשרויות, שתיהן סביב עדכון ב batch:

1. ביצוע סדרה של addBatch ל statement יחיד כאשר בכל קריאה מועברת פקודת SQL כמחרוזת וכן פרמטרים, ולבסוף executeBatch אחד להכל. למה זה טוב? כי כל סוגי העדכון/הוספה נכנסים לאותו batch. למה זה רע? כי לא נעשה prepare מראש לפקודות ה SQL.

2. ביצוע סדרה של addbatch לכמה preparedStatements שונות, כאשר כל אחת הוכנה מראש עם פקודת SQL שונה, ולבסוף executeBatch נפרד לכל preparedStatement. למה זה טוב? כי preparedStatement יותר יעיל. למה זה רע? כי יש לנו כשישה סוגי פקודות, מה שאומר שישה batchs נפרדים.

בשני המקרים העדכונים עטופים בטרנזקציה שנעשה לה commit רק בסוף.

למישהו יש ידע מעשי איזו מהאפשרות עדיפה במקרה כזה מבחינת ביצועי מעבד, מסד הנתונים, וסך כל משך העדכון (על השעון)?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 29-06-2011, 19:18
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 1 שנכתבה על ידי טוארג שמתחילה ב "ביצועים של addBatch עם MySQL ו JDBC"

עבור MyISAM, אתה יכול להשתמש ב- LOCK TABLES כדי להשהות כתיבה עבור כל השאילתות שנמצאות עד הפסקה שמסירה את הנעילה מהטבלה.
יש גם את אופציית ה-delay_key_write שמשהה כתיבה לקובץ האינדקס של MyISAM.
אלו כנראה הדברים היחידים שישפרו משמעותית את המהירות.

עבור InnoDB, המשתנה innodb_flush_log_at_trx_commit צריך להיות בערך של 2 (או 0, אבל עדיף 2) במקום ערך הברירת מחדל של 1.
חשוב גם להגדיל את חוצץ ה-I/O בעזרת innodb_log_buffer_size, תלוי בכמות המידע.
המידע מועבר מהחוצץ לקובץ log. השינויים בקובץ ה-log מועברים למקומות המתאימים כאשר ה-log "מתמלא" כל פעם מחדש. לכן כדאי להגדיל את גודלו של כל קובץ log, שוב תלוי בכמות המידע, בעזרת המשתנה innodb_log_file_size.

המנוע InnoDB נורא מורכב, אם אתה רוצה לשפר שאילתות עבורו, אתה חייב ללמוד אותו.
מה שאני כותב\יודע זה כלום לעומת מה שאפשר לשפר..
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 00:49

הדף נוצר ב 0.03 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר