Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използване на SQL Server като DB опашка с множество клиенти

Препоръчвам ви да разгледате Използването на таблици като опашки. Правилно внедрените опашки могат да се справят с хиляди едновременни потребители и да обслужват до 1/2 милион операции за опашка/изключване на опашка в минута. До SQL Server 2005 решението беше тромаво и включваше смесване на SELECT и UPDATE в една транзакция и дайте точния микс от съвети за заключване, както е в статията, свързана от gbn. За щастие след SQL Server 2005 с появата на клаузата OUTPUT е налично много по-елегантно решение и сега MSDN препоръчва използването на клаузата OUTPUT:

Можете да използвате OUTPUT в приложения, които използват таблици като опашки или за задържане на междинни набори от резултати. Това означава, че приложението постоянно добавя или премахва редове от таблицата

По принцип има 3 части от пъзела, които трябва да оправите, за да може това да работи по много едновременен начин:

  1. Трябва да извадите от опашката автоматично. Трябва да намерите реда, да пропуснете всички заключени редове и да го маркирате като „изключен от опашката“ в единична атомна операция и това е мястото, където OUTPUT клауза влиза в игра:
    with CTE as (
      SELECT TOP(1) COMMAND, PROCESSED
      FROM TABLE WITH (READPAST)
      WHERE PROCESSED = 0)
    UPDATE CTE
      SET PROCESSED = 1
      OUTPUT INSERTED.*;
  1. Вие трябва структурирайте таблицата си с най-левия клъстериран индексен ключ в PROCESSED колона. Ако ID беше използван първичен ключ, след което го преместете като втора колона в клъстерирания ключ. Дебатът дали да се запази неклъстериран ключ в ID колоната е отворена, но аз силно подкрепям не с всякакви вторични неклъстерирани индекси върху опашки:
    CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);
  1. Не трябва да правите заявка към тази таблица по друг начин, освен чрез Dequeue. Опит за извършване на операции Peek или опит за използване на таблицата и като опашка и тъй като магазин много вероятно води до блокиране и ще забави драстично пропускателната способност.

Комбинацията от атомно изключване, READPAST намек за търсене на елементи за изключване и най-ляв ключ в клъстерирания индекс въз основа на бит за обработка осигуряват много висока пропускателна способност при силно едновременно натоварване.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да групирате по месеци от полето Дата с помощта на sql

  2. как мога да актуализирам топ 100 записа в sql сървър

  3. Използване на RegEx в SQL Server

  4. Връщане на списък с функции на дялове в SQL Server (T-SQL)

  5. SQL Server 2016:Подобрения в OLTP в паметта