602SQL-Úplná dokumentace Index  

Řízení a omezování provozu serveru

Na pracující SQL server se mohou přihlašovat klienti. Kromě nich mohou na serveru běžet samostatná vlákna, spuštěna buď některým klientem nebo přímo serverem (například v proceduře _on_server_start).

Přehled přihlášených vláken a klientů poskytuje systémový informační dotaz _iv_logged_users a také stránka Klienti a vlákna v okně Monitor.

Zamčení a odemčení serveru

Pro provádění některých akcí je třeba, aby na serveru žádný klient ani vlákno nepracovali. Příkladem je modifikace tabulek při upgrade datových struktur nebo oprava integrity databáze. Před těmito akcemi je třeba server zamknout. Při zamykání serveru:

Zamčení provádí funkce Lock_server a odemčení funkce Unlock_server. Zamčení lze také ovládat pomocí zaškrtávacího čtverce Přístup pro klienty blokován na první stránce okna Monitor.

Ukončení činnosti klientů přihlášených na server

Jsou-li na server přihlášení klienti, existuje několik cest jak ukončit jejich činnost:
  1. Klientům lze rozeslat zprávu vyzývající je k odpojení od serveru. Toto by měl být primární způsob, jak zacházet s interaktivními klienty. Na zprávu ovšem nebudou reagovat neinteraktivní klienti (klientské programy bez obsluhující osoby) nebo klienti spuštění uživatelem, který není zrovna přítomen u počítače.

    K odeslání zprávy připojeným klientům slouží funkce Message_to_clients. Zprávu lze také odeslat pomocí akce vyvolané z Řídicího panelu (Systém / Nástroje / Zpráva síťovým klientům).

  2. Pokud klient nebo vlákno provádí dlouhotrvající operaci na serveru, lze tuto operaci přerušit tak, že skončí chybou a změny provedené v poslední rozpracované transakci jsou odvolány.

    K přerušení operace slouží funkce Break_user a také akce Přerušit klientskou operaci na stránce Klienti a vlákna okna Monitor. Je třeba pamatovat na to, že klientské aplikace nemusejí počítat s tím, že jejich akce skončí nečekaně chybou a není zaručeno, že na vzniklou situaci budou adekvátně reagovat.

  3. Klienta, který je připojen na server, ale neprovádí žádnou operaci, lze násilně odpojit. Pokud klient má na serveru rozpracovanou transakci, změny v ní provedené budou odvolány.

    K odpojení slouží funkce Kill_user a také akce Odpojit klienta od serveru na stránce Klienti a vlákna okna Monitor. Ne každý klientský program bude na takové odpojení rozumně reagovat.

  4. Pokud klient je připojen na server a čeká uvnitř některé funkce, lze toto čekání předčasně ukončit zásahem popsaným níže.

Ukončení čekání klientů a vláken na serveru

Klienti i samostatná vlákna mohou na serveru (i dlouhodobě) čekat ve funkcích Wait_for_semaphore nebo Sleep. Klienti mohou navíc čekat ve funkci Wait_for_event.

Toto čekání lze předčasně ukončit vnějším zásahem. Výsledkem toho zásahu je, že

  1. provádění výše uvedených funkcí skončí a funkce vrátí výsledek odpovídající předčasnému ukončení stejnému jako při vypínání SQL serveru,
  2. server je uveden do stavu, kdy i každé následující volání těchto funkcí ihned končí,
  3. ve všech aplikacích, které obsahují proceduru _on_worker_stop, se tato procedura (synchronně) zavolá (bez parametrů).

Tento zásah lze vyvolat vypnutím zaškrtávacího čtverce Procesy na pozadí povoleny na první stránce okna Monitor nebo voláním funkce Operation_limits s parametrem WORKER_STOP.

Tuto akci smí provést pouze provozní správce. Volání procedury _on_worker_stop probíhá na účet skupiny provozních správců. Proto skupina provozních správců musí mít přidělena potřebná práva ke spuštění této procedury i ke všemu, co tato procedura provede.

Pokud tento mechanismus má sloužit k úspěšnému zastavení pracovních vláken, pak tato vlákna musejí testovat výsledek funkcí Wait_for_semaphore a Sleep. Pokud výsledek signalizuje ukončení práce serveru, musejí ihned skončit.

Obnovení činnosti pracovních vláken

Mnohé aplikace potřebují ke své práci jedno nebo více samostatných vláken běžících na pozadí. Tato vlákna se obvykle spouštějí při startu serveru.

Pokud jsou pomocí výše popsaných nástrojů zastavena pracovní vlákna, lze jejich opětovné spuštění zajistit takto:

  1. v každé aplikaci, která využívá pracovní vlákna, se vytvoří uložená procedura bez parametrů _on_worker_restart,
  2. zapnutím zaškrtávacího čtverce Procesy na pozadí povoleny na první stránce okna Monitor nebo voláním funkce Operation_limits s parametrem WORKER_RESTART se všechny tyto procedury synchronně provedou.

Tuto akci smí provést pouze provozní správce. Volání procedury _on_worker_restart probíhá na účet skupiny provozních správců. Proto skupina provozních správců musí mít přidělena potřebná práva ke spuštění této procedury i ke všemu, co tato procedura provede.

Existuje-li riziko, že některé pracovní vlákno nebylo zastaveno, pak je úkolem autora procedury _on_worker_restart, aby takovou situaci rozpoznal a nespouštěl vlákno opětovně.

Pokud samostatná vlákna byla ukončena akcí popsanou v předchozí sekci, pak jejich opětovné spuštění musí být provedeno zde popsaným postupem. Jinak by server setrvával ve stavu, kdy každá čekací funkce ihned končí, a spuštěná samostatná vlákna by vzápětí skončila.

Provoz na víceprocesorovém počítači

602SQL server využívá jedno vlákno pro každého připojeného klienta (plus případná další vlákna pro speciální úkoly). Operační systém může přiřadit vlákno k procesoru, ale nemůže využít více než jeden procesor pro jedno vlákno. Proto tedy víceprocesorový stroj nemůže nijak urychlit práci jednotlivého klienta, např. vyhodnocení dotazu.

62SQL server může využít více procesorů tehdy, když k němu současně přistupuje víc klientů se svými požadavky.