При поддержке SQL Server важно иметь точное представление о его загруженности. Два показателя, которые часто рассматриваются как индикаторы загруженности SQL Server, – это Batch Requests/sec и Transaction/sec. Хотя они могут выглядеть похожими, они используют разные типы измерений: пакеты и транзакции. Поэтому, чтобы правильно понять эти важные показатели, давайте сначала попытаемся понять, что такое пакеты и транзакции в SQL Server и в чем разница между ними.
Пакеты операторов SQL Server
Когда выполняется несколько операторов SQL Server в виде группы операторов или когда выполняется один SQL оператор, состоящий из нескольких операторов SQL, это считается пакетом операторов SQL Server. Преимущество такого подхода заключается в том, что выполнение более эффективно по сравнению с выполнением каждого отдельного оператора. Одно из преимуществ заключается в том, что в большинстве случаев снижается сетевой трафик, а второе преимущество заключается в том, что целевой источник данных часто может оптимизировать выполнение операторов в пакете операторов SQL Server.
Некоторые факты о пакетах SQL:
- Пакет SQL – это набор различных SQL операторов, объединенных для выполнения без гарантии успеха или неудачи.
- Пакеты SQL обеспечивают создание единого плана выполнения запроса.
- Переменные, созданные внутри пакета, не могут быть использованы за пределами пакета.
- Несколько пакетов, работающих с несколькими объектами, могут быть объединены в один блок транзакции.
- Несколько транзакций могут быть объединены в один пакет SQL, что позволяет обеспечить целостность объектов SQL Server.
SQL Server поддерживает три типа пакетов:
- Явные пакеты – когда два или более SQL оператора объединены в одном пакете и разделены точкой с запятой (;).
- Хранимые процедуры – каждая хранимая процедура, содержащая более одного SQL оператора, рассматривается SQL Server как пакет включенных SQL операторов.
- Массивы параметров – когда приложение использует параметризованные операторы, наличие массива параметров является эффективным способом выполнения одного оператора несколько раз в виде пакетного выполнения.
Транзакции SQL
Транзакция SQL – это единица работы SQL Server, выполняемая на SQL базе данных. Каждая транзакция SQL Server состоит из нескольких операций, где каждая операция может состоять из нескольких SQL операторов, выполняемых в определенном порядке. Основной характеристикой транзакции SQL является то, что она может быть либо полностью завершена, либо полностью отменена. Транзакции SQL Server должны полностью соответствовать концепции SQL Server атомарности, согласованности, изоляции и устойчивости (ACID), установленной для обеспечения целостности данных базы данных.
SQL Server поддерживает следующие режимы транзакций:
- Автозавершение транзакций – Режим по умолчанию, при котором каждый отдельный SQL оператор рассматривается как транзакция и автоматически фиксируется при выполнении.
- Явные транзакции – Этот режим активируется, когда транзакция начинается явно с помощью оператора BEGIN TRANSACTION в начале и затем транзакция явно завершается оператором COMMIT или ROLLBACK.
- Неявные транзакции – В режиме неявных транзакций SQL Server автоматически запускает новую транзакцию после завершения предыдущей транзакции, что создает непрерывную цепочку транзакций.
- Транзакции, ограниченные пакетом – Этот режим применим только к функции SQL Server Multiple Active Result Sets (MARS), предназначенной для выполнения нескольких пакетов с использованием одного соединения SQL.
Batch Requests/sec против Transactions/sec
Когда речь идет о поддержке SQL Server, важно, чтобы администратор базы данных знал, какое количество данных SQL Server способно обрабатывать. В то время как Batch Requests/sec и Transactions/sec являются важными показателями загруженности SQL Server, Batch Requests/sec обычно считается более надежным показателем. Он может видеть больше, чем метрика Transactions/sec, и предоставляет более полную информацию о загруженности SQL Server.
Однако важно отметить, что полная мощность устранения неполадок заключается в том, чтобы хорошо знать свой собственный SQL Server. Понимая разницу между пакетами и транзакциями и используя обе метрики в сочетании, администратор базы данных может устранить слепые зоны и получить полное представление о загруженности SQL Server.
Мониторинг и анализ этих метрик позволяют администратору базы данных принимать обоснованные решения и оптимизировать производительность SQL Server.