סקריפט לשדרוג טבלאות ל-Clusterd ColumnStore Index

01/02/2017

תחום ה-ColumnStore עבר כמה וכמה שינויים מאז שהוצג לראשונה בגרסת 2012.כיום, בגרסת 2016, ניתן ליצור כבר Clusterd ColumnStore Index שזו טבלה הבנוייה כ-ColumnStore, ולא רק טבלה סטנדארטית שיש לה בנוסף אינדקס ColumnStore; והרבה מהמגבלות שצויינו בפוסט שלי מאז – הוסרו.כדאי לציין שהמונח Clusterd ColumnStore Index קצת מטעה, כי בניגוד ל-Clustered Index “רגיל” (RowStore) – הוא אינו ממויין פיזית; ולכן ראוי היה לקרוא לו ColumnStore Heap, אלא ששם זה לא נשמע כל כך טוב.. אני מצרף בזאת סקריפט לשדרוג טבלאות ל-Clustered ColumnStore Index (מחולל את פקודות ה-TSQL הרלוונטיות): טבלאות שיש להן כבר Clustered Index “רגיל” (RowStore) יכולות להשתדרג בשלב...

Linked Servers – מקרים מיוחדים

31/01/2017

ברוב במקרים, כשיוצרים Linked Server הולכים בדרך הישר: קישור לשרת ב-Dommain שלנו אליו אנחנו פונים ב-Linked Server ששמו כשם השרת, ויוצרים אותו בקלילות בעזרת ה-Wizard ב-SSMS.לעיתים יש מקרים מיוחדים, ואז צריך להתחיל לעבוד עם פרוצדורות המערכת ולהסתבך קצת (אני מדבר רק על עצמי..). לפני כשנה וחצי הצגתי את הקוד ליצירת Linked Server ל-SQL Azure, אך אחזור על כך לידיעת המאזינים שהצטרפו זה עתה: Exec master.dbo.sp_addlinkedserver @server=N'MyLinkedServer', ...
אין תגובות

תזמון משימות ב-SQL Azure בעזרת Azure Function

26/01/2017

(תודה מראש לפיני קרישר על העזרה והמידע המועיל) אחת הבעיות המעט משעשעות שהיו ל-Azure בתחילת דרכו הייתה שלא ניתן היה להשתמש בו ללא שרת On Premise שאיפשר את כל מה ש-Azure לא.למשל: כיצד עובדים מול Azure? הרי לא מדובר בהתקנה שכוללת כלי Client כמו ה-SSMS.. צריך היה איזו התקנה – זמנית או מוזלת או לא חוקית כדי שיהיה ממשק עבודה. נכון שהפורטל הישן איפשר פעם הרצה של פקודות SQL, אך האפשרות הזו נוטרלה משיקולים השמורים למיקרוסופט, וכל מה שנשאר אלו אתרים בלתי תלויים (למשל- SkyVia). ההגינות מחייבת לציין שה-SSMS הוא בחינם כיום ולכן אין בעייה להוריד ולהתקין, אבל אני...
תגיות: , , ,
אין תגובות

הוספת שורות לשתי טבלאות בו זמנית

01/12/2016

פעם כתבתי פוסט על הנושא, בעיקר בתור אתגר; בשם חסכו ואמצו (2).באופן כללי, ניתן לשלוף את השורות שהשתנו (במקרה זה – התווספו) על ידי האופרטור Output,ואם קצת מתחכמים – להפנות את הפלט של ה-Output לטבלה שניה.בערך כך: If Object_ID('B') Is Not Null Drop Table B; If Object_ID('A') Is Not Null Drop Table A; Create Table A(ID Int Identity Primary Key, ...
אין תגובות

איך יש לו הרשאות? הקבוצה BUILTIN\Administrators

16/11/2016

מכירים את זה שיום אחד אתם מגלים משהו “חדש” אבל מתברר שהוא די ישן, ויש לכם הרגשה שכולם ידעו עליו ורק אתם לא?..מה, אתם לא מכירים את זה?.. נו, טוב: כנראה שזה רק אני.. :-( לאחד המשתמשים יש הרשאות נדיבות באחד האינסטנסים. זה לא סתם “אחד המשתמשים” אלא בעל תפקיד ניהולי, אבל לא אמורות להיות לו הרשאות ליצור דטבייס חדש.. אני ניגש לאופציית ה-Security ב-SSMS, אך שם יש לו לכל היותר הרשאות public (כלומר- הוא יכול להתחבר ותו לא), והוא אינו משוייך לאף Role.אם כך – אולי הוא משוייך לאחת הקבוצות ברמת ה-Active Directory.. אולי כן ואולי לא, אבל...
תגיות: , ,
אין תגובות

מניעת חריגות מערכים אפשריים בעמודות Identity וב-Sequences

25/10/2016

לעמודות בטבלאות יש מגבלות של גובה הערכים (בעמודות מספרים או תאריכים) או של אורך מחרוזות (בעמודות טקסטואליות), ובדרך כלל תקלות אמורות להימנע באופן אפליקטיבי.הפוסט הזה מטפל במניעת חריגות בעמודות Identity וב-Sequences: למשל, הגדרנו עמודת Int כ-Identity, הערך בעמודה הולך וגדל, וקצת אחרי 2 מיליארד הגענו לגבול העליון של Int. כשזה יקרה הקוד שינסה להכניס נתונים לטבלה יפול, והטיפול עלול להיות מורכב: שינוי העמודה (כולל הנתונים בה), שינויים במשתנים בפרוצדורות שמטפלות בה, שינויים ברפליקציות ועוד. סיפור שלם!תרומתי הצנועה למערכה היא סקריפט שמציג את הערכים הנוכחיים לצד הערכים המקסימליים האפשריים, בכל האובייקטים הרלוונטיים: Declare @SQL Varchar(Max);Select ...
אין תגובות

שילוב של האופרטורים In ו-Like

27/09/2016

נניח שרוצים למצוא בטבלה את כל השורות בהן עמודה מסויימת שווה ל-.. או ל.. או ל.. וכו’ (רשימה ארוכה של ערכים אפשריים). במקום לכתוב משהו כמו- Select *From MyTblWhere MyCol='..' Or MyCol='..' Or MyCol='..' .. נכתוב משהו אלגנטי וקריא יותר בסגנון של- Select *From MyTblWhere MyCol In ('..', '..', '..', .. ..); מה נעשה אם נרצה לכתוב משהו כמו- Select *From MyTblWhere MyCol Like '%..%' Or Like MyCol='%..%' Or MyCol Like '%..%' .. הרי לא נוכל לשלב In ו-Like ביחד.מה עושים?פתרון פשוט אין,...
אין תגובות

סטטיסטיקה: עדכון וקבלת החלטות

13/04/2016

הפוסט שלהלן ממחיש את השימוש בסטטיסטיקה על ידי המערכת לבחירת ה-Execution Plan, ואת השפעתה של סטטיסטיקה לא מעודכנת על שימוש זה ואיכות הבחירה. בעזרת טבלת sys.messages (טבלת מערכת בת כ-250,000 שורות) אבנה טבלה עם נתונים היסטוריים, כלומר- אכניס את תוכן טבלת המערכת לטבלה שאבנה, בתוספת תאריך: If Object_ID('T_Messages','U') Is Not Null Drop Table T_Messages; Create Table T_Messages ( DateTime Not Null, message_id Int Not Null, language_id Int Not Null, ...

היכן הפסיק ה-n-י? (מציאת מופע של תת מחרוזת): גרסת ה-String_Split

07/04/2016

לפני למעלה מ-6 שנים, בראשית דרכי כבלוגר, פרסמתי את הפוסט היכן הפסיק ה-n-י? (מציאת מופע של תת מחרוזת):נתונה טבלה ובה עמודת Subjects עם מקצועות שונים שכל סטודנט לומד - Create Table T_Students (Name VarChar(50), Subjects VarChar(Max));GoInsert Into T_StudentsValues ('Ana','Geography,Literature'), ('Beni','Chemistry,Economics,History,Sociology'), ('Carmel',''), ('Dana','Literature,Economics,Philosophy,Sociology'), ('Eli','Zoology,Economics,Geography,History,Science'), ('Felicia','Medicine');Go ויש לשלוף את המקצוע הרביעי (אם יש..) של כל סטודנט.הפתרון שאז מצאתי, בלוגר צעיר ונרגש שחרד...

Create & Drop Index

06/04/2016

מה, זה לא צריך להיות Drop & Create? מוחקים אינדקס קיים, ויוצרים מחדש גרסה משופרת שלו, בדרך כלל עם תוספת של עמודה לאינדקס עצמו או לרשימת ה-Include..אז זהו שלא, וזה שייך לפינת ה”וואלה?” של השבוע, ובעברית - “איך לא חשבתי על זה קודם?”..פיני קרישר, ראש הצוות הבלתי נלאה, סיפר לי שקודם הוא עשה Drop לאינדקס, ואז תוך כדי כך שהאינדקס החדש נבנה – משימה כבדה בפני עצמה,  השרת התחיל לטחון Table Scans כי האינדקס לא היה קיים וה-Execution Plan השתנה לרעה, ה-CPU נסק אל על, ה-IO חגג, והשמחה הייתה רבה..בפעם הבאה ניצור קודם כל את האינדקס החדש עם שם...
תגיות: , ,
אין תגובות