• מעקב אחרי שינויים ב-SQL Server באמצעות חילוץ המידע מ- Transaction Log Backups

    באחת הקבוצות שאני עוקב אחריהן בפייסבוק, פורסם פוסט בו שאל מישהו איך הוא יכול לעקוב אחרי שינויים שנעשים בטבלאות השמורות ב- SQL Server, כדי להעביר את המידע לדטאבייס אחר. לכאורה, אירוע פשוט ולא מורכב במיוחד שכבר כתבתי עליו בעבר. אבל, לשואל הנ"ל היו כמה דרישות קצת פחות טריוויאליות: מדובר במצב קצת טריקי, שהוביל למספר הצעות…

  • למה אני אוהב את ClickHouse?

    אחד השמות העולים בעולם הדטאבייסים, בדגש על דטאבייסים המיועדים לאחסון כמויות גדולות של מידע, הוא ClickHouse. ClickHouse אינו שחקן חדש בשוק. למעשה, מדובר בדטאבייס שהפיתוח שלו התחיל עוד בשנת 2012, כפרוייקט פנימי של חברת Yandex שמטרתו הייתה לתמוך את המוצר המתחרה שלהם ל-Google Analytics שנקרא Metrica. עם השנים, הפך ClickHouse לפרוייקט אופן-סורס, ויצא מאוחר יותר…

  • נושאים בביזור – Distributed Transaction באמצעות 2PC ו- 3PC

    אחד ה- primitives העיקריים בעבודה עם DB-ים רלציוניים (ולא רק) זאת הטרנזקציה. טרנזקציה, היא אוסף של פעולות שמובטח לנו שכולן הצליחו להתבצע, או לחלופין שאף אחת מהן לא התבצעה. בואו נניח כעת שאנחנו רוצים לעשות טרנזקציה, שמערבת מס’ רכיבים, שכל אחד מהם בנפרד יודע לעשות טרנזקציה, ואנחנו רוצים לעשות טרנזקציה שכוללת פעולות מול כל אחד…

  • Entity Framework והטעויות שיגרמו לכם לבעיות ביצועים

    בעשור האחרון, מרבית הפיתוח מול הדטאבייסים עושה שימוש ב- ORM-ים כאלה ואחרים. אחד ה- ORM-ים הפופולריים בעולם הדוטנט, הוא Entity Framework. בפוסט הזה, אסקור טעויות נפוצות שמשליכות על ביצועים של עבודה מול ה- DB בעבודה עם ORM-ים באופן כללי, ובפרט בעבודה עם Entity Framework. כלל הדוגמאות בפוסט מבוססות על ה- DB של Stack Overflow, בגרסה…

  • מה הבעייה עם nvarchar(max) או varchar(max)

    כולנו (או לפחות, כל מי שיצר טבלה ב- DB) מכיר את הרגע שבו הוא מגיע לקבוע data type של עמודה טקסטואלית, בוחר varchar/nvarchar וצריך לקבוע את הגודל המקסימלי. האם לשים 10? 20? 100? הרי אף אחד לא יודע מה יילד יום. וכשלא יודעים מה יקרה – יש כאלה שפשוט בוחרים ללכת על המקסימום. וככה נולדות…

  • SQL Server: שימוש בפונקציות COMPRESS ו- DECOMPRESS לטובת דחיסת נתונים

    מזה מספר שנים, SQL Server מציע באופן מובנה יכולת של Data Compression. מדור ביכולת לדחיסת המידע בטבלאות ואינדקסים, בין אם “רגילים” (row store) או clustered / nonclusted columnstore indexes. כאשר מדובר על דחיסה של אינדקסים “רגילים” – אנחנו יכולים לבחור בין דחיסה ברמת השורה – שהיא בעיקרה רלוונטית ל- fixed length data types, שהשמירה שלהם…

  • DbFunctions.TruncateTime ובעיית הביצועים המוחבאת

      לאחרונה נתקלתי בבעיית ביצועים בעת עבודה עם Entity Framework שנגרמה כתוצאה משימוש במתודה DbFunctions.TruncateTime. לטובת הדוגמא, בואו נסתכל על טבלה בשם Posts במבנה כמו בתמונה מצד שמאל. הטבלה מכילהה מס’ עמודות, ובין היתר עמודת CreationDate מסוג datetime (או datetime2, פחות רלוונטי למקרה שלנו) שכוללת התאריך והזמן של יצירת רשומה.נניח גם שהעמודה הזאת היא ה-…

  • QDS_LOADDB-מה זה אומר ומה אפשר לעשות

    אחד הפיצ’רים שהושקו ב- SQL Server 2016 היה ה- Query Store. אם עוד לא יצא לכם להכיר אותו, ממליץ לקרוא עליו קצת פה. בגדול, מדובר בכלי שמאפשר להוציא insights טובים יותר בסוגיות שמעסיקות DBA-ים. בין היתר, זיהוי של שאילתות מעמיסות, זיהוי רגרסיות בריצת שאילתות וטיפול נוח בזה ועוד.החל מ- SQL Server 2017, המנגנון של ה-…

  • SQL Server: הצגת טכניקות שונות למעקב אחרי שינויים בטבלאות

    מפתחים ו-DBA-ים רבים נדרשים בשלב זה או אחר להתמודד עם הדרישה הבאה: יש אפליקציה כלשהי שצריכה לקבל איזשהו feed על נתונים חדשים או נתונים שהתעדכנו עבור איזשהו צורך (אפליקציה שממתינה למידע חדש, תהליך ETL וכו’ ורוצות לקבל “דלתאות” של מה שקרה), כאשר המקור לנתונים הללו זאת איזושהי אפליקציה אחרת – שהיא בעצמה מעדכנת אותם ב-…

  • קורס SQL בסיסי–חינם ביוטיוב

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