שימוש ב- AlwaysOn להרמת Readable Secondary–איך זה יכול להשתבש ומה אפשר לעשות

18 בMarch 2017

לאורך השנים, עבר SQL Server לא מעט שלבים באבולוציה של פתרונות שהמטרה שלהם לתת HA/DR מסוגים שונים. בשנים האחרונות, אחד הפתרונות המרכזיים שבו עושים שימוש הוא AlwaysOn. אחד הדברים החזקים ב- AlwaysOn הוא הגמישות שלו וההתאמה שלו למגוון (יחסית רחב) של תרחישים. אחד הדברים המעניינים שזה מאפשר, הוא הרמת read-only replica. הרעיון הוא replica מעודכנת, שמקבלת את כל המידע ומשמשת בד”כ לשליפות שונות – כאשר אפשר למשל להריץ עליה תהליכי reporting, לעשות בה שימוש לשאילתות ad-hoc וכו’ – מבלי להפריע לאפליקציה המרכזית. או לפחות, זה הרושם שעלול להתקבל אם רק קוראים על הנושא ברפרוף. המטרה שלי בפוסט הזה...
תגיות: ,
אין תגובות

עובדים עם SQL Server? אתם צריכים לעקוב אחרי ה- CU שמתפרסמים

8 בMarch 2017

אם אתם עובדים עם SQL Server בסביבת production, אתם צריכים לעקוב אחרי רשימת ה- CU שמתפרסמים. אם אתם DBA-ים, אז כנראה שזה לא מחדש עבורכם (אני מקווה…). אם, לעומת זאת, אתם מפתחים שיוצא להם לעבוד עם אפליקציה מבוססת DB, ואתם אלה “שחיים” את האפליקציה, פותרים בעיות שצצות בה (גם ברמת התחזוקה), ומתמודדים עם נושאים לכל רוחב הגזרה (כולל דטאבייסים) – אז אולי אתם לא יודעים שקיים כזה דבר, וחבל. ב- SQL Server (כאשר אני מדבר על גרסת ה- on-prem, ולא על SQL Azure)– מיקרוסופט מוציאה גרסא עיקרית חדשה פעם במס’ שנים. הגרסא החדשה כוללת בד”כ פיצ’רים נוספים, יכולות חדשות,...
תגיות: , ,
אין תגובות

צעד אחר צעד: הקמת תשתית לטיפול בלוגים מבוססת ELK (חלק שני)

14 בDecember 2016

בחלק הקודם של הפוסט הצגתי דיזיין אפשרי לתשתית לוגים– שכולל את RabbitMQ כמערכת ההודעות שלנו, logstash בתפקיד רכיב פירסור הלוגים, ElasticSearch בתפקיד מנוע האינדוקס (ולמעשה מסד הנתונים של כל התשתית) ו- Kibana בתור רכיב הויזואליזציה שיאפשר לנו לדעת מה קורה במערכת. להזכירכם – כך זה נראה: בפוסט הקודם הראיתי איך מבצעים את שלבי הקמת התשתית:  התקנת ElasticSearch גם על windows וגם על linux וקינפוג של cluster, התקנת RabbitMQ והתקנת וקינפוג logstash. בפוסט הזה נמשיך עם התהליך ונשלים את שתי הקוביות החסרות: service שיאפשר כתיבה ל-log והתקנת וקינפוג Kibana, שיאפשר לנו לצפות בהודעות הלוג שלנו. Service קליטת ההודעות...
אין תגובות

צעד אחר צעד: הקמת תשתית לטיפול בלוגים מבוססת ELK (חלק ראשון)

16 בNovember 2016

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

SQL Server למפתחים: Unique Index ו- IGNORE_DUP_KEY

26 בOctober 2016

אחד הפיצ’רים הבסיסיים לסכימה של מסדי נתונים, היא היכולת להגדיר unique constraint. מאחורי הקלעים, Unique Constraints מתבססים על Unique Indexes שנוצרים כדי לשרת את ה- constraint, כלומר – כדי לאפשר ל- SQL Server לבדוק בזמן ביצוע פעולות הוספה ועדכון שה- constraint לא מופר. את הפוסט הזה אני רוצה להקדיש לפיצ’ר שימושי שמפתחים צריכים גם כן להכיר – שימוש ב- unique index על טבלה לסינון כפילויות בזמן ההכנסה. צריך להבדיל גם בין שני תתי-תרחישים אפשריים: לפעמים, נכונות המידע דורשת מאיתנו שלא יהיו שורות כפולות. למשל, אם אנחנו מנהלים טבלה של אזרחי ישראל – לא יכולים להיות שני אזרחים עם אותו...
תגיות: , ,
אין תגובות

SQL Server למפתחים: Transaction Isolation Level

24 בOctober 2016

הקדמה SQL Server, כמו כל דטאבייס רלציוני טוב, עונה על סט של עקרונות שנקראים ACID: ר”ת של Atomicity, Consistency, Isolation, Durability שמטרתם להבטיח את שלמות הנתונים במסד הנתונים. ממש ממש בגדול – העקרונות הללו אומרים שכשאתם מכניסים מידע לדטאבייס הוא נשאר שם, כשאתם שולפים נתונים אתם מקבלים נתונים אמיתיים ונכונים . בפוסט הזה אני רוצה להתמקד רק באחת מהמילים הללו: Isolation. מדובר למעשה בהגדרה (לכאורה) פשוטה: ההבטחה שגם אם שתי טרנזקציות רצות במקביל, תוצאת הביצוע שלהן בפועל תהיה כאילו הן רצו אחת אחרי השנייה.כמובן, שבפועל אנחנו כן נרצה שדברים יעבדו במקביל. ולכן, נרצה...
תגיות: , ,
3 תגובות

SQL Server למפתחים: Indexed Views לטיפול בנתונים סיכומיים

22 בOctober 2016

הקדמה Indexed view הוא פיצ’ר מאד שימושי, אבל גם באופן יחסי פחות מוכר – לפחות לאוכלוסיית המפתחים. מדובר למעשה בשילוב בין Views לבין אינדקסים “רגילים” (non-clustered indexes) שקיימים על טבלאות. לפני שנבין מה הבעייה, ואיך אפשר להשתמש ב- Indexed Views כדי לפתור אותה, ניישר קו לגבי מס’ מונחים. View – אפשר לחשוב על view בתור שאילתת SELECT ששמורה בתור אובייקט ב-DB שלנו. אם, למשל, יש לנו view בשם MyView הוא יכול לייצג שאילתה כלשהי (למשל, SELECT ColumnA, Column B FROM MyTable WHERE ColymnC=5) וכל שאילתה שנריץ על ה- view תהיה בפועל כאילו הרצנו אותה על ה- result set שחוזר...
תגיות: , ,
תגובה אחת

SQL Server למפתחים: Bulk Insert ו- SqlBulkCopy

15 בOctober 2016

הקדמה כל מפתח שעובד/עבד מול דטאבייס באשר הוא יודע איך מכניסים שורות לטבלה. מדובר באחת מהפעולות הבסיסיות, INSERT,. למשל, אם יש לי טבלה שמכילה 3 עמודות: עמודת ID עולה (IDENTITY), עמודה שמכילה ערך מספרי ועמודה של טקסט: CREATE TABLE .( IDENTITY(1,1) NOT NULL, NOT NULL, (2000) NOT NULL, CONSTRAINT PRIMARY KEY CLUSTERED ( ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON ) ON אזי ה- SQL Statement שבו נשתמש כדי...
תגיות: , ,
2 תגובות

ייצור אוטומטי של סקריפטי התקנה והסרה של SQL CLR Functions / Stored Procedures

17 בNovember 2015

לפני כמה ימים פרסמתי פוסט על משהו קטן שעבדתי עליו בין תרגיל אינפי לתרגיל לינארית, שכולל למעשה אוסף של functions ו- stored procedures המאפשרים עבודה מול Redis מ- SQL Server, כאשר מרבית הפרוייקט זה סה”כ תפירה בין קוד C# קיים לעבודה מול Redis ל- SQL Server – שמתבצעת באמצעות SQL CLR, פיצ’ר חביב (למרות שהיה יכול להיות טוב משמעותית) שמאפשר לשלב ולכתוב רכיבים שונים בדטאבייס (functions, stored procedures וכו’) ב- C#. הדרישה שהייתה לי לצרכי פיתוח הייתה פשוטה – שבסוף כל build יהיה לי קובץ install.sql שכשאני מריץ אותו הוא מכיל את כל ה- CREATE statements של ה- CLR...
תגיות: , ,
אין תגובות

SQL: להפוך XML במבנה לא ידוע (חלקית) לתצוגה טבלאית

14 בNovember 2015

היכולת לעבוד עם XML-ים ב- SQL Server לא חדשה בכלל וקיימת מזה גרסאות. בין הדברים שמתאפשרים בעבודה עם XML-ים זה אכסון XML-ים בטבלאות באמצעות datatype מותאם לכך, פונקציות לפירסור XML, ויכולת לייצא תוצאות של שאילתות לפורמט XML במקום לפורמט טבלאי. למשל, אם אנחנו רוצים לשלוף מ- sys.tables ולהציג את התוצאות כ-XML בפורמט טבלאי, כל שצריך לעשות זה להוסיף FOR XML statement בסוף. ניתן בצורה הזאת גם להשיג שליטה מוגבלת על מבנה ה-XML שמתקבל. למשל, בדוגמא הבאה, אני מגדיר שיהיה root element בשם items ושכל שורה תהיה עטופה בתור item: SELECT *FROM sys.tablesFOR XML PATH('item'), ROOT('items') ככה ייראה ה-XML שיתקבל: אבל,...
תגיות: , ,
אין תגובות