Kategorie szkoleń | Egzaminy | Kontakt
  • 7
  • 3
  • 122

Czy jest możliwość ustawienia wersji Express w taki sposób, żeby była cały czas aktywna? Standardowo po określonym czasie bezczynności serwer przechodzi w stan uśpienia (idle). Wtedy przy ewentualnej potrzebie korzystania z bazy zaczyna się od nowa budzić i wczytywać do pamięci dane, co strasznie spowalania pracę.

 

Baza jest używana do obsługi danych programu typu klient-serwer, ale oczywiście jest to jedno stanowisko.

Wersja bazy: MS SQL Express 2008 R2.

Adam_Sałek
  • Zapytał
  • @ Adam_Sałek | 19.01.2015
    • 8
    • 0
    • 5

Odpowiedzi (7)

  • 11

Z tego, co się dowiedziałem z dokumentacji, serwer po pewnym czasie nieaktywności zapisuje zasoby, które ma w pamięci, na dysk i zwalnia zaalokowaną pamięć. Nie znalazłem sposobu na wyłączenie tego mechanizmu.

Ale mam inny pomysł - może wystarczy do harmonogramu Windows dodać skrypt, który co kilka-kilkanaście minut będzie łączył się z bazą i robił prostego selecta? Taki skrypt może wyglądać mniej więcej tak:

 

sqlcmd -S nazwa_serwera -Q "SELECT * FROM baza.schemat.tabela"
Maciej_Krauze
  • Odpowiedział
  • @ Maciej_Krauze | 23.01.2015
    • lider
    • laureat
    • 45
    • 16
    • 58
Komentarze
  • 0

Nie ma takiej możliwości. Zachowanie to jest celowe, ponieważ edycja Express została zaprojektowana, aby korzystać z zasobów jak aplikacja w przeciwieństwie do pełnych edycji SQL Servera, które korzystają z zasobów jak usługa.
Odnośnie propozycji Pana Macieja: teoretycznie powinno działać, ale w praktyce ze względu na domyślny interwał właściwości AUTO_CLOSE baz danych równy 300ms może powodować spadek wydajności związany z cyklicznym otwieraniem i zamykaniem bazy danych.

Jedyne wspierane rozwiązanie to aktualizacja do pełnej wersji SQL Servera  np. Standard.

  • Odpowiedział
  • @ | 26.01.2015
  • TRENER ALTKOM AKADEMII
  • 0

Dziękuję za odpowiedzi. Wedziałem, że problemem jest AUTO_CLOSE, ale może istnieje możliwość ustawienia tej właściwości jako 'false'?

Adam_Sałek
  • Odpowiedział
  • @ Adam_Sałek | 28.01.2015
    • 8
    • 0
    • 5
  • 3

Tutaj można przeczytać opis tego zachowania SQL Servera oraz propozycje, jak sobie z tym poradzić.

  • Odpowiedział
  • @ | 29.01.2015
  • TRENER ALTKOM AKADEMII
  • 3

Tak, można na istniejącej bazie zmienić ustawienie AUTO_CLOSE poleceniem ALTER DATABASE.

Przykład zastosowania poniżej:

USE [master]
GO
ALTER DATABASE [DBName] SET AUTO_CLOSE OFF
WITH NO_WAIT
GO
  • Odpowiedział
  • @ | 29.01.2015
  • TRENER ALTKOM AKADEMII
  • 0

Dziwna sprawa z tym AUTO_CLOSE. Mimo że w bazie ustawiłem na OFF, to przeglądając logi nadal widzę wpisy typu: "Server resumed execution after being idle.."

Adam_Sałek
  • Odpowiedział
  • @ Adam_Sałek | 10.02.2015
    • 8
    • 0
    • 5
  • 0

Zgodnie z odpowiedziami powyżej samo AUTO_CLOSE nie rozwiąże problemu, ponieważ dotyczy jedynie poziomu baz danych.

  • Odpowiedział
  • @ | 10.02.2015
  • TRENER ALTKOM AKADEMII