Проблема доступности SQL-сервера: выполнение больших запросов мешает другим соединениям соединиться

Уточнить мой комментарий к ответу Ptolemy's...

Путем установки размера блока, таким образом, очень значительное большинство каждого файла содержится в одном блоке, Вы действительно получаете эффективность ввода-вывода. С 2K размером блока и 8.5K средний размер файла, 50% Ваших операций ввода-вывода будут к 5 блокам или больше. Путем установки 16K размера блока это кажется, что очень значительное большинство записей было бы к единственному блоку; который сделал бы те 3% из чтений намного более эффективными, когда они происходят.

Одной вещью рассмотреть является резервный ввод-вывод. При резервном копировании данных каждый файл будет считан, по крайней мере, однажды, и их записи каталога будут исследоваться каждая резервная передача. Если Вы собираетесь создать резервную копию этого, рассмотрите резервный ввод-вывод в своих проектах.

Протесты: если Ваша базовая система хранения является той, которая уже делает некоторую виртуализацию хранения (такую как дисковый массив HP EVA или другие массивы того класса) затем, это не имеет значения так. Фрагментация этого типа не будет замечена, поскольку данные уже физически существуют в высоко фрагментированной природе на фактических дисках. В этом случае 2k размер блока очень хорошо и не будет влиять на производительность как очень. Все еще будет увеличение производительности путем выбора размера блока, достаточно большого для содержания большинства ожидаемых размеров файла, но величина не будет столь же значительной.

1
задан 9 December 2010 в 15:59
2 ответа

Это означает, что у Вас есть чрезвычайно субоптимальный запрос. Обычные подозреваемые:

  • никакие или плохие индексы
  • функции на столбцах в операторе Where (= проигнорированные индексы)
  • преобразования/приоритет типа данных (= проигнорированные индексы)
  • Скаляр udfs с доступом таблицы в ИЗБРАННЫХ пунктах (= влияние КУРСОРА)
  • Представления, ЗАПРАШИВАЮЩИЕ/ПРИСОЕДИНЯЮЩИЕСЯ с представлениями (Представление является макросом, который расширяется),

Это могла также быть простая проблема ресурса: данные возвратили касание вся база данных, таким образом, это использует слишком много памяти, что Вы получаете подкачку страниц? Или Вы добираетесь, ASYNC_NETWORK_IO ожидает, который может означать, что клиент не принимает результаты с такой скоростью, как он должен?

Обычно, если Вы истратили сервер затем, это - плохой код и/или дизайн, не механизм DB.

0
ответ дан 4 December 2019 в 10:41
  • 1
    Мой colleague' s DB оптимизирован, с индексом, специально для того, что он запрашивает. Я don' t думают he' s присоединение к чему-либо, it' s просто крупная, крупная таблица. I' m соединяющийся с приложением ADO.NET, и мое время соединения. Кроме того, мы находимся на логически различных базах данных, если это означает что-нибудь. Вы, вероятно, получаете подкачку страниц с таким огромным запросом, но почему это должно влиять на небольшое соединение? Мог это быть огромным запросом создает затор сетевой сокет, так, чтобы I' m не передающий мое сообщение подключения? –  Carlos 31 May 2010 в 23:07

Пока Вы уверены, что оптимизировали насколько Вы можете, можно хотеть посмотреть настройки для параллелизма; значение по умолчанию должно использовать все процессоры для параллельных запросов, Вы могли изменить его, чтобы истратить в более низком количестве в зависимости от количества процессоров, которые Вы имеете, запрос может взять немного дольше для выполнения, но оно должно оставить достаточно вычислительной мощности свободным обслужить запросы входа в систему. Если проблема изолируется к этому запросу, вместо того, чтобы внести изменение настроек в масштабе всей системы, у Вас может быть свое изменение colleage его запрос путем добавления опции MAXDOP видеть, помогает ли это.

0
ответ дан 4 December 2019 в 10:41

Теги

Похожие вопросы