יום רביעי, 22 בפברואר 2012

How to pin table into buffer pool memory in SQL Server


DBCC pintable (database_id, table_id)

פקודה זו תנחה את SQL SERVER שלא לפנות Pages של הטבלה שצויין מספרה מהזיכרון מטמון של השרת.

בשוטף, השרת משתמש באלגוריתם LRU - Last Recently Used, כלומר הוא
משאיר בזיכרון את ה Pages השימושיים ביותר עבורו. Pages ישנים שלא נעשה בהם שימוש מוסרים מהזיכרון כאשר יש צורך לאכלס Pages נוספים שאין להם מקום.

הפקודה pintable של dbcc מגדירה שעל ה Pages של הטבלה שציינו לא יוסרו מהזיכרון.

חשוב להדגיש - זה לא אומר שהמערכת טטען את הPAGES הללו לזיכרון, אלא רק תשאיר אותם אם הם כבר הגיעו לזיכרון בדרך המקובלת.


יום חמישי, 9 בפברואר 2012

Double Check

Double Check


היום אני רוצה להסב את תשומת הלב לשימוש באילוץ CHECK 
לפעמים אנו משתמשים באילוצי CHECK רבים כדי לאכוף את נכונות הנתונים במערכת המידע.
אך לפעמים אנו יכולים לעשות טעות בסיסית שתגרום להרבה משערות ראשנו לנשור.


להלן דוגמא
USE tempdb
GO

CREATE TABLE DoubleCheck(col1 int)
GO

ALTER TABLE DoubleCheck
ADD CONSTRAINT CheckGraterThen5 CHECK(col1>5)
GO
ALTER TABLE DoubleCheck
ADD CONSTRAINT CheckLessThen5 CHECK(col1<5)
GO

בודגמא הזו אנו רואים שני אילוצים הסותרים אחד את השני, לא מתבצעת בדיקה שהאילוצים סותרים והמערכת לא מתריעה על כך.
במקרה הזו לא נוכל להכניס אף נתון לטבלה!
(חוץ מ NULL כמובן)

השתמשו באילוצים בחוכמה, ואם אתם מבצעים טעינה מסיבית כדאי מאוד לכבות את האילוץ לפני ביצוע הטעינה.
לדוגמא
ALTER TABLE {TableName} NOCHECK CONSTRAINT {ConstraintName}

יוחנן