תקלה בהתקנת SQL 2012 RC0

29/01/2012

גרסת RC0 זו גרסת ההתנסות האחרונה לפני ההשקה של SQL 2012 בפורים. מי שמתקין אותה בשיטת מיקרוסופט (Enter => Next => I Agree => Choose Default/Recommended Option => OK..) עלול לקבל במהלך הגדרות ההתקנה הודעת שגיאה בהאי לישנה: There was a failure to validate setting CTLRUSERS in validaton function ValidateUsers, ולינק לכתובת באינטרנט שלא מופיע בה מידע רלוונטי או הצעה לפתרון. הפתרון: בשלב Distributed Replay Controller יש להקיש <Next> ולא לבחור ב-Add Current User (בה השתמשנו באחד השלבים הקודמים לבחירת sa): כדאי לשים לב שבמהלך הגדרות ההתקנה- אנחנו מתקדמים על...
אין תגובות

Parallelism

27/01/2012

כאשר לשרת יש יותר ממעבד אחד הוא יכול לבחור לבצע פעולות במקביל וזה משפיע על בחירת ה-Execution Plan האופטימלי. בפוסט הקודם הראיתי כיצד במקרה של Join בין טבלה לא מאונדקסת לטבלה עם Primary Key & Clustered Index המערכת תבחר בעיבוד במקביל: Select * From messages T1 Inner Join messages_ClstInd T2 On T1.message_id=T2.message_id And T1.language_id=T2.language_id; מאוד יכול להיות שחלק שמי שניסה את הקוד...
אין תגובות

השפעת האינדקסים על ביצוע Join בין טבלאות

26/01/2012

כיצד המערכת מבצעת Join ומה השפעת האינדקסים ומספר הרשומות על כך? בהמשך לפוסט הקודם- אנתח מספר דוגמאות מבחינת התוכנית שהמערכת תבחר ולא מבחינת הביצועים, והן יתבססו על הטבלאות והאינדקסים שיצרנו בפעם הקודמת: --1. No Indexes Select * Into messages From sys.messages; Go   --2. Clustered Primary Key on message_id,language_id Select * Into messages_ClstInd From ...

השפעת האינדקסים על חיפוש פשוט בטבלה

24/01/2012

כיצד המערכת מחפשת ערכים בטבלה ומה השפעת האינדקסים על כך? מדובר בנושא די בסיסי בתחום, והפוסט הזה מוקדש למי שעדיין אינו מכיר. טבלת המערכת הגדולה ביותר היא sys.messages הכוללת את הודעות השגיאה של המערכת (קרוב ל-100,000 שורות בגרסת 2008 ועוד היד נטוייה בגרסאות הבאות): Select * From sys.messages; ניצור מספר עותקים ממנה ונאנדקס כל אחד בדרך אחרת, ונבדוק כיצד מתבצע החיפוש בכל פעם. נתחיל עם עותק ללא אינדקסים כלל: --1. No Indexes ...
אין תגובות

ריבוי תנאים הפונים לאותו אובייקט

22/01/2012

נניח שאנחנו מחפשים עובד שיש לו גם הכשרה ב-SQL Server, גם ב-C# וגם ב-XML, או לחילופין סכימה בדטבייס שברשימת האובייקטים שלה יש גם פרוצדורות, גם טבלאות, וגם Views. כמקובל צריך לנסח שליפה ותנאים, אך יש לשים לב שבשתי הדוגמאות הנ"ל כל התנאים פונים לאותה טבלה (טבלת ההכשרות או טבלת האובייקטים) ובדיקה של כל תנאי בנפרד תגרום לשלוש פניות לטבלה וזה קצת מיותר. נציע מספר פתרונות, ונבחן אותם באמצעות ה-Execution Plan וסיכומי Statistics IO לגבי פעולות הקריאה: לי עצמי לקח זמן רב להבין כיצד להיעזר באמצעים האלו, וגם כיום...
אין תגובות

איתור שגיאות בטבלאות Slowly Changing Dimension

19/01/2012

טבלאות SCD מקובלות במחסני נתונים, וההבדל בינן לבין טבלאות מימד רגילות (טבלאות Dim שכוללות את התיאור ופרטים נוספים לכל קוד בטבלת ה-Fact) הוא שלכל קוד יכולות להיות בהן מספר רשומות לפי טווחי תאריכים. למשל- בטבלת מימד עובדים, במקום שלכל קוד עובד תהיה שורה אחת בה יופיעו שמו, כתובתו, תפקידו, מצבו המשפחתי וכו'; לכל עובד יהיו מספר שורות – כל אחת עם תאריך התחלה ותאריך סיום, ובכל פעם שפרט משמעותי משתנה – מוסיפים שורה מעודכנת תוך ש"סוגרים" את השורה הקודמת עם התאריך של אתמול כתאריך סיום, ופותחים את החדשה עם התאריך של היום כתאריך התחלה. שיטה זו חשובה כשרוצים לדעת מה היה...
אין תגובות

ישום היררכיה (עץ) בעזרת מספרים ראשוניים

17/01/2012

הפוסט להלן מציג דרך לממש עץ בעזרת מספרים ראשוניים, תוך שימוש בתכונה שכל מספר יכול להיות מיוצג כמכפלה של מספרים ראשוניים (על ידי פירוק לגורמים). עץ בתורת הגרפים מוגדר כגרף מכוון בו לכל קודקוד יש לכל היותר קודקוד אחד שמחובר אליו בקשת, והוא יכול לתאר מבנים או תהליכים שונים: 1. מערכת היררכית בארגון בה לכל אחד יש מנהל אליו הוא כפוף (זולת המנהל הבכיר ביותר), אם כי למנהל יכולים להיות כפופים מספר עובדים. 2. מבנה דוח כספי מורכב. למשל- מאזן מחולק לנכסים ולהתחייבויות והון עצמי; ההתחייבויות מחולקות להתחייבויות לזמן קצר ולזמן ארוך; התחייבויות לזמן קצר כוללות לקוחות, שכר עובדים,...
אין תגובות

בדיקת טבלת Slowly Changing Dimension בעזרת פונקציית Lag

13/01/2012

פונקציית Lag – מחידושי SQL Server 2012 שניתן להתייחס בעזרתה לרשומות קודמות ללא Self Joins מסורבלים, מאפשרת בין היתר לבצע ביקורת איכות לטבלאות SCD בקלות רבה יותר. בפוסט שפרסמתי לאחרונה הופיע סקריפט ליצירת טבלה מתאימה, וכן שליפה למציאת שגיאות המבוססת על Group By. לא אחזור כאן על הסקריפט, אלא רק אראה כיצד ניתן להגיע לחריגים בקלות בעזרת הפונקציה Lag: With T As(Select *, Lag(EndDate,1,Null) Over(Partition By ID Order By StartDate) PreviousEndDateFrom T_SCD)Select *From TWhere PreviousEndDate+1<>StartDateOrder By ID, ...
אין תגובות

יעול שאילתת Union עצמי ודוגמה ליישום בבדיקת טבלת Slowly Changing Dimension

08/01/2012

Union עצמי הוא Union של טבלה עם עצמה – כשרוצים למשל לאחד נתונים ממספר עמודות, וכדי שזה לא ישאר ברמה הטכנית – אני אדגים כיצד לבדוק תקינות טבלת Slowly Changing (להלן- SCD) בעזרתה. לפני כשנתיים כתבתי פוסט על SCD, הסברתי בקצרה מה זה, ונתתי והדגמתי כיצד לבדוק את תקינותה ולחפש שגיאות. בטבלאות SCD יש שתי עמודות תאריכים – תאריך התחלה ותאריך סיום, ונניח שאנחנו רוצים לקבל רשימה של כל התאריכים בעמודה אחת. ניצור שוב את הטבלה ונוסיף עוד כמה שורות כדי שיהיה יותר מעניין: Use TempDB;Go If Object_Id('T_SCD','U') Is Not Null Drop Table T_SCD;Go Create Table T_SCD(ID Int, StartDate DateTime, EndDate DateTime);Go --1 תקיןInsert...
תגיות: ,
אין תגובות

Service Broker – דוגמה ליישום

04/01/2012

ברוב הדוגמאות של Service Broker (להלן SB) שניתן לפגוש במאמרים שונים, Tutorials, והרצאות- נותנים דוגמה כיצד מעבירים הודעות בין שני Services: מגדירים אובייקטים (Message Type, Contract, Queue וכו'), שולחים הודעת Hello World דרך חלון ה-SSMS, פותחים חלון נוסף בו מושכים את ההודעה ושולחים הודעת תגובה, וכו': Queue הוא תור של הודעות, דומה קצת לטבלה. Contract מאפשר להעביר הודעות מהסוג שהוגדר ב-Message Type (ניתן להגדיר מספר Message Types לכל Contract). Service יוצר קשר בין Queue ל-Contract, או לחילופין- Contract יוצר קשר בין Queues דרך ה-Services שלהם (ניתן להגדיר מספר Contracts בכל Service ל-Queue אחד). הקשר נוצר ביצירת ה-Service בו מוגדר...
תגיות: ,
אין תגובות