« לעמוד בלוג ראשי

נעילות ושאילתות ארוכות

תיאור כללי

נעילה בבסיס הנתונים מתרחשת כאשר שני משתמשים (או אפליקציות) או יותר מנסים לגשת למשאב המצוי בבסיס הנתונים בו זמנית.

הנעילה מונעת מהנתונים להתקלקל או להינזק כאשר מספר משתמשים מנסים לקרוא מאותם משאבים כאשר משתמשים אחרים מנסים לכתוב אליהם. כל משתמש יכול לשנות רשומות (פריטים) בבסיס הנתונים אשר נעלו והנעילה מעניקה לו גישה אקסקלוסיבית לרשומה עד שהנעילה משתחררת. הנעילה אינה מספקת אקסקלוסיביות רק לכתיבה אלא גם מונעת קריאה של שינויים שטרם הסתיימו.

נעילות יכולות להתרחש על פריטים מהסוגים הבאים: טבלאות, שורות נתונים (בטבלאות), בלוקים של נתונים (למשל עמודים), פריטים מוטמנים (Cached), חיבורים (Connections) ואף מערכות שלמות.
רוב הנעילות המתרחשות בבסיסי נתונים הן נעילות טראנזאקציונאליות ומטרתן לשמור על אטומיות (טראנזאקציה תתבצע במלואה או לא תתבצע כלל), עקביות (כל טראנזאקציה שתבוצע בעתיד תראה את השפעות הטראנזאקציות שבוצעו לפניה), בידוד (חד ערכיות של הנתונים הנובעת מהאטומיות) ויציבות (תכונת השרידות של טראנזאקציות שבוצעו, דהיינו שמירת המצב לאחר ביצוע הטראנזאקציה גם אם המערכת מתרסקת אחריה).

גורם משמעותי לאיטיות

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

מספר בעיות גורמות לאיטיות עקב הנעילות והן מתחלקות לארבעה סוגים: נעילות “חמות” (מצב בו שיחות – sessions רבות דורשות גישה לאותו מנעול בתדירות גבוהה), חסימות ארוכות (המתרחשות כאשר שאילתות נועלות רצות במשכי זמן ארוכים), נעילות מוות (Deadlocks, מתרחשות כאשר שני תהליכים הנוגעים לאותו פריט ממתינים כל אחד לסיומו של האחר ולכן אף אחד מהם לא מתבצע) ונעילות מערכת.

כדי למנוע עד כמה שניתן את אותן בעיות יש לנטר את בסיסי הנתונים באופן שוטף ולטפל בכל בעיה באופן פרטני. מערכת AimBetter מנטרת את בסיס הנתונים שלך בזמן אמת ומאפשרת לך לראות בכל זמן נתון נעילות ושאילתות ארוכות פעילות בבסיסי הנתונים שלך.

1

קושי בזיהוי לאחור

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

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

2

שליטה מרחוק מחוץ למשרד

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

ניתוח וזיהוי תבניות

מערכת AimBetter מאפשרת לך לראות בדיוק את השאילתות הארוכות ו/או הנועלות הרצות במערכת שלך ומאפשרת לך להעתיקן לSQL Server Management Studio ולבצע שינויים וסימולאציות כדי לבחון דרכים לפתרון:

3

זיהוי משתמש בביצוע פעולות כבדות חריגות

מערכת AimBetter מאפשרת לך לזהות מיהם המשתמשים שעל שמם רצות השאילתות הארוכות והנועלות וכך לזהות את המשתמשים ו/או האפליקציות ו/או התהליכים המבצעים את הפעולות הכבדות והחריגות ולטפל בבעיות בהתאם. את שם המשתמש תוכל לראות בעמודה Session:

4

התנגשות בין אפליקציות פעילות ומשתמשים

מערכת AimBetter מאפשרת לך לראות את כל המשתמשים המריצים שאילתות ארוכות או גורמים לנעילות ואת כל האפליקציות המתחרות על אותם משאבים. תוכל לזהותם על פי העמודות Session וProgram במסך.

סיכום

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