2013-10-30
Ile masz dostępnej pamięci w systemie dowiesz się nawet z Task Managera.
Który proces zabrał tę pamięć też pomoże określić Task Manager.
Jeśli tylko na Twoim serwerze znajduje się SQL server, to prawdopodobnie w ten sposób ustaliłeś, że właśnie SQL server zużył prawie całą pamięć. Zgadłem?
Zastanówmy się, jak ustalić która baza zajęła tyle miejsca (bufor). Może do tego posłużyć zapytanie odnalezione w czeluściach Internetu (http://www.sqlservercentral.com/Forums/Topic1215340-391-1.aspx): Czytaj dalej »
2013-10-30
Nadawanie uprawnień dla użytkownika, który zamierza tylko zaimportować pewne pakiety SSIS, a później nimi zarządzać można ograniczyć do utworzenia loginu na serwerze SQL dla tego użytkownika, utworzenia mu usera w bazie danych msdb oraz przypisaniu go do roli bazy danych db_dtsltduser
Wykaz tych ról oraz wynikające z nich uprawnienia są dokładniej opisane tutaj (dla różnych wersji SQL):
http://technet.microsoft.com/en-us/library/ms141053(v=sql.90).aspx
2013-10-29
2013-10-29
Mam takie zapytanie:
select (
select count(*)
from ::fn_trace_geteventinfo( x.traceid )
where eventid = 111
) count_eventid
from ::fn_trace_getinfo( default ) x
nieważne co robi. Kiedy uruchamiam je na pewnym SQL 2005 otrzymuję błąd
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near 'x’.
Ale ciekawostka. Błąd pojawia się tylko, gdy zapytanie jest uruchamiane w master. W innych bazach danych działa!
Ponieważ klient nie miał możliwości określenia bazy podczas uruchamiania swojegozapytania, obszedłem ten problem. Zmieniłem dla loginu uruchamiającego to zadanie domyślną bazę danych na tempdb… i poszło!
2013-10-29
2013-10-28
Jak pisałem we wcześniejszym wpisie (dwa lata temu!), możliwe jest zarejestrowanie procedur, które mają się automatycznie uruchomić zaraz po włączeniu SQL Servera. Do rejestrowania takich procedur służy procedura sp_procoption.
Jednak jak wylistować procedury, które zostały zarejestrowane do automatycznego uruchomienia przez sp_procoption? Możesz do tego posłużyć się poleceniem:
SELECT ROUTINE_NAME
FROM MASTER.INFORMATION_SCHEMA.ROUTINES
WHERE OBJECTPROPERTY(OBJECT_ID(ROUTINE_NAME),’ExecIsStartup’) = 1
Źródło: http://www.mssqltips.com/sqlservertip/1574/automatically-running-stored-procedures-at-sql-server-startup/
2013-10-28
Podczas regulowania ilości pamięci dostępnej dla SQL server przydaje się znajomość wartości Page Life Expectancy.
Liczba ta mówi ile czasu po wczytaniu strony z dysku, średnio rzecz ujmując, strona znajduje się w pamięci ale nikt się do niej nie odwołuje. Jeżeli ta liczba będzie wysoka to znaczy, że serwer dysponuje dużą ilością pamięci. Wczytuje sobie do bufora strony kiedy były one po raz pierwszy potrzebne a potem sobie tam leżą i leżą i dość długo nikt z nich nie korzysta. Zauważ, że gdyby pamięci było za mało, to taka nieużywana stron znajdująca się w buforze zostanie z niego prędko wyrzucona, by zrobić miejse dla kolejnej strony.
Dawniej MS mówił, że wartość ta powinna wynosić minimum 300 sekund. Obecnie można rozważać wyższe wartości.
Jeżeli na twoim serwerze liczba jest duża, a występują problemy z dostępną pamięcią dla innych procesów pomyśl o zmniejszeniu parametru MaxMemory. W SQL Server od 2008 R2 opcja działa natychmiast.
Informacje o page life expectancy znajdziesz w raportach o SQL serwerze lub wykonując zapytanie:
SELECT [object_name],
[counter_name],
[cntr_value]
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%Manager%’
AND [counter_name] = 'Page life expectancy’
Zajrzyj też na http://blog.sqlauthority.com/2010/12/13/sql-server-what-is-page-life-expectancy-ple-counter/