Wyłączone constrains

9-Lip-2013

Wszyscy chcemy żeby nasze bazy danych działały idealnie i aby nic ich nie spowalniało. Jeśli mowa byłaby o samochodzie, to teraz opowiedziałbym o sprawdzaniu oleju, ciśnienia w kołach  itp. Mowa jedanak o bazie danych. Oto co możesz zrobić, aby twojej bazie było lżej.

Jak pisałem w tym artykule możesz chwilowo (np. przed wykonaniem importu) wyłączyć constrainy. Dzięki temu import może wykonać się szybciej. Pamiętaj jednak, aby wyłączony constrain włączyć i to najlepiej z opcją WITH CHECK!

Opcja with check powoduje, że wszystkie dane znajdujące się w tabeli zostaną przed włączeniem check sprawdzone, czy aby na pewno nie naruszają zasad określonych przez check. Owszem – ryzykujesz. Jeżeli takie niepoprawne dane się znajdą, to otrzymasz komunikat o błędzie i nie uda się włączyć check-a. Musisz w takim przypadku usunąć rekordy naruszające zasady lub ręcznie je poprawić.

Kiedy użyjesz opcji WITH CHECK, to serwer odnotuje to w swoich tabelach systemowych, a konkretnie w sys.check_constraints. Znajduje się tam kolumna is_not_trusted. Jeśli wartość jest ustawiona na 1 to oznacza to, że check jest lub kiedyś był wyłączony i administrator włączając ponownie constraina nie użył opcji WITH CHECK i nie sprawdził danych! Wartość ustawiona na 0 oznacza, że check nigdy nie był wyłączany lub po wyłączeniu został włączony z opcją WITH CHECK.

Zapytaniem

SELECT * FROM sys.check_constraints WHERE is_not_trusted = 1

możesz sprawdzić czy istnieją takie przypadki w twojej bazie danych. Oczywiście dla serwera podczas budowania planów zapytania wartość w tym polu ma znaczenie. Jeśli is_not_trusted jest równe 1, to optymalizator zapytań nie może przyjąć sobie, że wszystkie dane w tabeli spełniają określony przez CHECK warunek.

Jeśli chcesz sprawdzać tę wartość regularnie, to skorzystaj z odpowiedniego skryptu w SQL Server Agent.

Z wrodzoną złośliwością muszę stwierdzić, że tę część SQL serwera pisała chyba kobieta, bo kto inny mógł wpaść na pomysł, aby wartość „nie prawda, że nie jest zaufany” oznaczała, że check jest zaufany 🙂

Dodaj komentarz:

Autor: Rafał Kraik