Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Używanie SQL Server jako kolejki DB z wieloma klientami

Polecam przejrzeć Korzystanie z tabel jako kolejek. Właściwie zaimplementowane kolejki mogą obsłużyć tysiące jednoczesnych użytkowników i usługi nawet do 1/2 miliona operacji wpisywania/usuwania z kolejki na minutę. Do SQL Server 2005 rozwiązanie było kłopotliwe i wymagało mieszania SELECT i UPDATE w jednej transakcji i podaj odpowiednią mieszankę wskazówek dotyczących blokad, jak w artykule połączonym przez gbn. Na szczęście od czasu SQL Server 2005 z pojawieniem się klauzuli OUTPUT, dostępne jest znacznie bardziej eleganckie rozwiązanie, a teraz MSDN zaleca używanie klauzuli OUTPUT:

Funkcji OUTPUT można używać w aplikacjach, które używają tabel jako kolejek lub do przechowywania pośrednich zestawów wyników. Oznacza to, że aplikacja stale dodaje lub usuwa wiersze z tabeli

Zasadniczo są 3 części układanki, które musisz ułożyć dobrze, aby działało to w sposób wysoce współbieżny:

  1. Musisz automatycznie usunąć kolejkę. Musisz znaleźć wiersz, pominąć wszystkie zablokowane wiersze i oznaczyć go jako „wycofany z kolejki” w pojedynczej, niepodzielnej operacji, a to jest miejsce, w którym OUTPUT w grę wchodzi klauzula:
    with CTE as (
      SELECT TOP(1) COMMAND, PROCESSED
      FROM TABLE WITH (READPAST)
      WHERE PROCESSED = 0)
    UPDATE CTE
      SET PROCESSED = 1
      OUTPUT INSERTED.*;
  1. Trze musisz ustrukturyzuj swoją tabelę za pomocą klucza indeksu klastrowego znajdującego się najbardziej po lewej stronie w PROCESSED kolumna. Jeśli ID został użyty jako klucz podstawowy, a następnie przenieś go jako drugą kolumnę w kluczu klastrowym. Debata, czy zachować klucz nieklastrowany w ID kolumna jest otwarta, ale zdecydowanie popieram nie posiadanie jakichkolwiek drugorzędnych indeksów nieklastrowanych w kolejkach:
    CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);
  1. Nie możesz wysyłać zapytań do tej tabeli w inny sposób niż przez usunięcie z kolejki. Próba wykonania operacji Peek lub próba użycia tabeli zarówno jako kolejki i jako sklep bardzo prawdopodobne doprowadzi do impasu i drastycznie spowolni przepustowość.

Kombinacja atomowego usunięcia z kolejki, wskazówki READPAST przy wyszukiwaniu elementów do usunięcia z kolejki i najbardziej lewego klucza w indeksie klastrowym w oparciu o bit przetwarzania zapewnia bardzo wysoką przepustowość przy wysoce równoczesnym obciążeniu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pierwsze spojrzenie na nowy estymator kardynalnych serwerów SQL Server

  2. Kiedy sortowanie programu SQL Server jest przewijane?

  3. Konwertuj zapytanie SQL Server na MySQL

  4. Przewodnik dla początkujących po tablicach SQL

  5. Visual Studio:ContextSwitchDeadlock