רמות רישום שונות במצב שינה

1. סקירה כללית

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

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

במדריך זה נראה את הרמות השונות של רישום בכניסה למצב שינה בעזרתן ניתן להשיג זאת.

2. רישום SQL

ברמה הבסיסית ביותר, אנו יכולים לרשום את משפטי ה- SQL שנוצרו על ידי Hibernate ללא ערכי הפרמטר בפועל המועברים אליו.

Hibernate משתמש בקטגוריה org.hibernate.SQL כדי לרשום מידע זה. לכן, כל שעלינו לעשות הוא להגדיר את רמת הרישום בקטגוריה זו לנפות.

ב- Log4J, נצטרך להוסיף a כּוֹרֵת עֵצִים אלמנט בתצורת ה- XML:

באופן דומה, ב- Log4J2 נוסיף a כּוֹרֵת עֵצִים אֵלֵמֶנט:

וב- Logback, נוסיף a כּוֹרֵת עֵצִים אֵלֵמֶנט:

כעת עלינו לראות את ה- SQL שנוצר ביומני:

2019-12-07 23:04:23 | DEBUG | [ראשי] o.h.SQL: 127 - הכנס לעובדים (עובד מספר, שם, כותרת, מזהה) ערכים (?,?,?,?) 2019-12-07 23:04:23 | DEBUG | [ראשי] o.h.SQL: 127 - בחר עובד0_.id בתור id1_0_, עובד0_.מועסק מספר כעובד2_0_, עובד0_.שם כשם3_0_, עובד0_.כותרת ככותרת4_0_ מעובד עובד0_

3. ערכי פרמטרים של רישום

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

מצב שינה רושם את פרמטרי הקלט והתוצאות שאוחזרו באמצעות org.hibernate.type.descriptor.sql קטגוריה עם רמת יומן של זֵכֶר. כעת, בואו נוסיף קטגוריה זו לקבצי התצורה שלנו.

ב- Log4J אנו עושים:

ב- Log4J2:

ולבסוף, בלוגבק:

כתוצאה מכך, עלינו לראות את ערכי הפרמטר המועברים להצהרת SQL וכן את תוצאת הביצוע:

2019-12-07 23:04:23 | DEBUG | [ראשי] o.h.SQL: 127 - הכנס לעובדים (עובד מספר, שם, כותרת, מזהה) ערכים (?,?,?,?) 2019-12-07 23:04:23 | עקבות | [ראשי] o.h.t.d.s.BasicBinder: 64 - פרמטר מחייב [1] כ- [VARCHAR] - [001] 07-12-2019 23:04:23 | עקבות | [ראשי] o.h.t.d.s.BasicBinder: 64 - פרמטר מחייב [2] כ- [VARCHAR] - [John Smith] 2019-12-07 23:04:23 | עקבות | [ראשי] o.h.t.d.s.BasicBinder: 52 - פרמטר מחייב [3] כ- [VARCHAR] - [null] 2019-12-07 23:04:23 | עקבות | [ראשי] o.h.t.d.s.BasicBinder: 64 - פרמטר מחייב [4] כ- [BIGINT] - [1] 2019-12-07 23:04:23 | DEBUG | [ראשי] o.h.SQL: 127 - בחר עובד0_.id בתור id1_0_, עובד0_.עובדמספר כעובד2_0_, עובד0_.שם כשם3_0_, עובד0_.כותרת ככותרת4_0_ מעובד עובד0_ 2019-12-07 23:04:23 | עקבות | [main] o.h.t.d.s.BasicExtractor: 60 - ערך חילוץ ([id1_0_]: [BIGINT]) - [1] 2019-12-07 23:04:23 | עקבות | [ראשי] o.h.t.d.s.BasicExtractor: 60 - ערך חילוץ ([עובד2_0_]: [VARCHAR]) - [001] 2019-12-07 23:04:23 | עקבות | [main] o.h.t.d.s.BasicExtractor: 60 - ערך חילוץ ([name3_0_]: [VARCHAR]) - [John Smith] 2019-12-07 23:04:23 | עקבות | [main] o.h.t.d.s.BasicExtractor: 50 - ערך חילוץ ([title4_0_]: [VARCHAR]) - [null]

ראוי לציין כי איננו צריכים לאפשר את org.hibernate.SQL קטגוריה כדי להציג את המידע הנ"ל. אנו יכולים להפעיל ולהשבית את שתי הקטגוריות באופן עצמאי.

אבל, זה הגיוני לאפשר org.hibernate.SQL כדי שנדע לאיזו משפט SQL ערכי הפרמטר קשורים אליו.

4. הפעל סטטיסטיקה של מצב שינה

מלבד ערכי הפרמטרים SQL ו- JDBC, מצב שינה יכול גם לרשום נתונים סטטיסטיים עבור כל משפט SQL. זה יכול להיות שימושי לזיהוי בעיות ביצועים פוטנציאליות.

Hibernate משתמש בקטגוריה org.hibernate.stat כדי לרשום מידע זה. אבל, שינה לא תמיד מייצרת נתונים סטטיסטיים אלה משום שהיא יכולה להשפיע לרעה על הביצועים.

ראשון, עלינו לומר ל- Hibernate ליצור נתונים סטטיסטיים אלה על ידי הגדרת מאפיין התצורה hibernate.generate_statistics ל נָכוֹן.

לדוגמה, אנו יכולים להגדיר מאפיין זה בתכונה שלנו hibernate.cfg.xml קוֹבֶץ:

נָכוֹן

יחד עם נכס זה, הגדרת הקטגוריה org.hibernate.stat ל- DEBUG יירשם הצהרה עם הנתונים הסטטיסטיים עבור כל שאילתה שבוצעה. כמו כן, זה יתעד הצהרת יומן רבת-שורות אחת בסוף הפגישה שתכלול מידע סטטיסטי:

2019-12-07 23:25:18 | DEBUG | [ראשי] o.h.s.i.StatisticsInitiator: 101 - סטטיסטיקה מאותחל [מופעל = נכון] 2019-12-07 23:25:19 | DEBUG | [ראשי] o.h.s.i.StatisticsImpl: 729 - HHH000117: HQL: from com.baeldung.hibernate.logging. עובד, זמן: 22 ms, שורות: 1 2019-12-07 23:25:19 | מידע | [main] o.h.e.i.StatisticalLoggingSessionEventListener: 258 - מדדי מושב {55600 שניות שננו הושקעו ברכישת חיבורי JDBC 1; 178600 שננו שניות השקיעו בשחרור 1 חיבורי JDBC; 2167200 ננו שניות השקיעו בהכנת 2 הצהרות JDBC; 2426800 שננו שניות השקיעו בביצוע 2 הצהרות JDBC; 0 ננו שניות שהוצאו לביצוע 0 קבוצות JDBC; 0 ננו שניות שהוצאו לביצוע 0 מכני L2C; 0 ננו שניות שהוצאו לביצוע 0 להיטים L2C; 0 ננו שניות שהוצאו לביצוע 0 החמצות L2C; 47098900 שננו שניות השקיעו בביצוע 1 שטיפות (שטיפה בסך הכל 1 ישויות ו -0 אוספים); 0 ננו שניות שהושקעו בביצוע 0 שטיפות חלקיות (שטיפה בסך הכל 0 ישויות ו- 0 אוספים)}

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

5. רשום את כל הפעילות

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

אך עלינו להשתמש בקטגוריה זו בזהירות מכיוון שהיא עשויה ליצור פלט יומן רב:

6. מסקנה

במדריך זה ראינו את רמות הרישום השונות במצב שינה. המידע הרשום יכול להיות שימושי מאוד במהלך הפיתוח. אך עלינו להיזהר בעת הפעלת הייצור מכיוון שהוא יכול להשפיע לרעה על ביצועי היישום.

וכמובן, את הקוד שמלווה הדרכה זו ניתן למצוא באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found