ביצועי מסד נתונים על גבי הזיכרון
-
שלום לכולם, לאחרונה אני מנסה לחקור את הנושא של ביצועי מסד נתונים, האם האופטימייזר מעלה חומר לזיכרון כדי לזרז שאילתות סלקט ואיך עובד הסיפור הזה.
השאלה הזאת נשאלת כלפי mysql ו SQL SERVER (מתנצל מראש על עוד 40 מסדי נתונים שלא הזכרתי את שמם... פשוט זה מה שיש בשוק הכי הרבה)
ב mysql יש דבר מדהים, אפשר מראש לעשות טבלה שכל כולה קיימת רק בזיכרון (ממורי אנג'ין), כאשר עושים למשל ריסטרט לשירות של mysql כל הנתונים נמחקים מהטבלה הזו, זה חשוב מאוד כי זה עשוי לכסות מידע מידע שהוא שימושי רק בשביל הזמן שהדטה בייס/המשתמש "חיים" (נפוץ באפליקציות מסוג משחקים וכדומה) אולם אין מה לעשות איתם לאחר מכן ולכן אין שום צורך "להטריח" את הדיסק הקשיח בנושא.
לגבי היכולת הזו ב SQL SERVER מצאתי מספר מאמרים אך לא הצלחתי להבין עד הסוף מה קורה שם, והאם זה תקף רק מגירסת 2014 ואילך, או גם בגירסאות נמוכות יותר. כמו"כ לגבי Mysql האם הוא עושה את העבודה הזאת גם עבור טבלאות רגילות שישנם בדיסק הקשיח או לא.
מי שיוכל לשפוך אור על הנושא אשמח לשמוע כאן תמצית הדברים:סידרת מאמרים ב MSDN כפי הנראה בתוקף רק מ 2014 ואילך:
בתודה מראש ליודעי האנגלית... גוגל לא יודע כל כך טוב.
פורסם במקור בפורום CODE613 ב07/02/2015 19:09 (+02:00)
-
תמקד יותר את השאלה כי בלינקים שהבאת יש הרבה מאוד חומר . . .
בעיקרון זה אפשרות לטבלאות שיישבו רק בזיכרון ולא בדיסק (אבל יש כן גיבוי לדיסק) וזה נקרא In-Memory Tables
הרעיון שונה מאוד מ SQL רגיל כי הוא משתמש בשיטה שונה לסנכרון בין קריאות לכתיבות ולכן (כמעט) לא מבצע נעילות על ה DATA (במקום להמתין הוא נותן לכל אחד ורסיה אחרת של השורה)
וגם שומר את החומר בזיכרון במבנה יעיל יותר ולא בPages של 8KB (מוכוון קריאה כתיבה לדיסק) זה מייעל גם את האינדקסים והוא גם מעלה לזיכרון DLLים שמכילים את הלוגיקה ומבנה הנתונים על מנת שיהיה אפס I/O בזמן עיבוד השאילתה
בעת גיבוי מסד הנתונים הטבלאות נשמרות בגלל שיש גיבוי לדיסק ולכן גם ישרדו נפילה של השרת או של ה Processפורסם במקור בפורום CODE613 ב08/02/2015 01:02 (+02:00)
-
תודה.
אמקד את השאלה שלי ככה:
א. האם היכולת הזו ב SQL SERVER קיימת רק מ 2014 ואילך?
ב. האם זאת טבלה שצריך "לבנות אותה מראש" בצורה כזאת שתהיה אין ממורי, או שאין צורך, והאופטימייזר עושה את זה לבד.
ג. לפי מה שהבנתי ממך יש גיבוי בדיסק הקשיח, פירושו שזאת טבלה לכל דבר, רק שהמידע שהיא מחזירה לא תמיד מדוייק, האם הבנתי נכון?פורסם במקור בפורום CODE613 ב08/02/2015 11:45 (+02:00)
-
א. כן, (בגירסאות קודמות יש משהו שנקרא PINTABLE וזה אומר ל SQL להעלות מראש טבלה מהדיסק לזיכרון, אני לא יודע על זה מספיק)
ב. כן, כמו טבלה רגילה רק אתה חייב ליצור את האינדקסים יחד עם הטבלה אי אפשר ליצור אינדקסים אחר כך, יש מגבלה על 8060 KB ל ROW, וצריך לבצע כמה שינויים ברמת ה DB
ג. אתה יכול להחליט אם אתה רוצה גיבוי לדאטה/לסכמה/בכלל לא בעת יצירת הטבלה, הוא מגבה את זה ברקע בצורה שהיא לא מאוד יעילה מבחינת שטח דיסק (בגלל שהוא מוכוון IN MEMORY אבל נותן יכולת לשחזר אם רוצים.
המידע שהיא מחזירה תמיד מדויק
OTLP כולל יכולת ליצור גם פרוצדורות שיתקמפלו ויעלו לזיכרון כ DLLים על מנת לשפר ביצועיםפורסם במקור בפורום CODE613 ב08/02/2015 12:25 (+02:00)