Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Вопросы и ответы по MS SQL Server" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
MS SQL Server - дело тонкое...
Информационный Канал Subscribe.Ru |
#215<< #216 |
СОДЕРЖАНИЕ
ТЕХНИКОН 2004 Группа компаний ТАЛГАР приглашает Вас принять участие в XIV Ежегодной конференции, более известной как ТЕХНИКОН, которая будет проходить с 22-26 ноября 2004 года. За столь долгий период проведения этого мероприятия в нашей компании сложился ряд традиций. Мы традиционно предлагаем:
Мы традиционно обеспечиваем:
Отличительной особенностью ТЕХНИКОНА-2004 являются блок по информационной безопасности и блок по работе с
персоналом. Мы считаем, что эффективному разрешению многих насущных вопросов способствует комплексное видение
сложившейся ситуации. Мы приглашаем к разговору:
ОСНОВНЫЕ НАПРАВЛЕНИЯ РАБОТЫ КОНФЕРЕНЦИИ:
ПРОГРАММА КОНФЕРЕНЦИИ "ТЕХНИКОН 2004" Мы готовы рассмотреть Ваши предложения в рамках тематики конференции. Вы можете выступить со своими докладами, предварительно обсудив освещаемые вопросы с Оргкомитетом конференции.
Место проведения: Подмосковный пансионат.
С уважением, руководитель Оргкомитета Марина Малышева Операции с большими объемами данных в SQL Server (продолжение)
По материалам статьи
Joe Chang
Large Data Operations in SQL Server Тестовые запросы Первые протестированные запросы - это команды Select, показанная ниже. Первая пара запросов Select использует столбец SeqID. Вторая пара запросов использует столбец DistID. Первый запрос в каждой паре - базовая команда Select без индексных хинтов. Второй запрос каждой пары использует хинт для указания определенного индекса для построения плана выполнения. -- Последовательные строки, сканирование таблицы (table scan) SELECT AVG(randMoney) FROM M3C_01 WHERE SeqID = 91 -- Последовательные строки, поиск по индексу (index seek) и bookmark lookup SELECT AVG(randMoney) FROM M3C_01 WITH(INDEX(IX_M3C_01_Seq)) WHERE SeqID = 91 -- Разнесенные строки, сканирование таблицы (table scan) SELECT AVG(randMoney) FROM M3C_01 WHERE DistID = 91 -- Разнесенные строки, поиск по индексу (index seek) и bookmark lookup SELECT AVG(randMoney) FROM M3C_01 WITH(INDEX(IX_M3C_01_Disr)) WHERE DistID = 91 Оценочное и действительное количество строк для обоих поисковых аргументов (SARG) составляет 100 000 строк. План выполнения запроса по умолчанию (без хинтов) для обоих поисковых аргументов является сканированием таблицы. Хинт заставляет план выполнения использовать индекс для поисковых аргументов, который требует bookmark lookup для получения значения столбца randMoney. Сейчас статистика SQL Server содержит только информацию об области значений столбцов, а не о расположении строк. Таким образом, SQL Server не может знать, сколько страниц потребуется в действительности. Т.к. запросы с разными поисковыми аргументами имеют одинаковое оценочное (и действительное) количество строк, то план выполнения и оценочные затраты ресурсов одинаковы для обоих поисковых аргументов. Планы выполнения для первой пары запросов показаны ниже.
Сканирование таблицы использует 101 012 страниц, а Bookmark Lookup - 100 000 строк, так что дейтвительное время выполнения запроса в основном зависит от затрат на страницу для сканирования таблицы и от затрат на строку для bookmark lookup. Затраты ресурсов на сканирование таблицы показаны ниже.
Оценочные затраты на ввод-вывод равны 37.4 и оценочная загрузка процессора равна 5.50, но оценочные затраты ресурсов на всю операцию равны 85.86. Рассчитывая затраты на ввод-вывод и загрузку процессора по формуле из предыдущей главы, получаем 74.86 для затрат на ввод-вывод и 11.00 для загрузки процессора. Это в точности соответствует общему значению затрат на ввод-вывод и загрузку процессора, равному 85.86. Каждый раз значения затрат на ввод-вывод и загрузку процессора точно равны половине ожидаемого значения, но общие затраты точно равны ожидаемому значению. Затраты на поиск по индексу показаны ниже. Затраты на ввод-вывод, равные 0.140240, точно равны базовым затратам из предыдущей главы плюс затраты на дополнительные 185 страниц, подразумевая, что каждая страница индекса содержит примерно 541 строку. Загрузка процессора, равная 0.110000, соответствует 100 000 строк для общих затрат на ввод-вывод и загрузку процессора, равных 0.250619.
Затраты на bookmark lookup показаны ниже. Затраты на ввод-вывод, равные 311.86, на 99.8% соответствуют затратам на ввод-вывод для единственной строки для Bookmark Lookup (0.0031249), умноженным в 100 000 раз.
Для тестирования больше применялись не изменение системной памяти или размера тестовых данных, а изменение настроек максимума памяти сервера. Разные времена выполнения, измеряемые с помощью Profiler с установленным максимумом памяти сервера в 256M и 1,154M, показаны ниже. Счетчики STATISTICS IO и Perfmon disk подтверждают, что вся таблица читается с диска с 256 мегабайтами серверной памяти, плана выполнения с Index Seek и Bookmark Lookup по столбцу SeqID, который требует очень небольшого количества чтений диска. При оценке времени выполнения для памяти в 1,154 мегабайт и данные, и индексы находились в памяти.
Оба сканирования таблицы требуют около 10.5 секунд для выполнения, так что расположение строк не влияет на время сканирования таблицы. Количество операций ввода-вывода для каждого физического диска составляло примерно 600/сек. при 64Кб на 1 чтение при скорости передачи 37.5Мб/сек., почти максимальная скорость для винчестера Seagate ST318451 (современное поколение дисков со скоростью вращения 15K поддерживает последовательную скорость передачи данных >50MB/сек.) План выполнения с поиском по индексу для последовательных строк показывает некоторую начальную активность диска (меньше, чем 200 операций ввода-вывода) при конфигурации памяти в 256 мегабайт, но после этого выполняется в памяти. План выполнения с поиском по индексу для разнесенных строк был вынужден получать каждую 8-килобайтную страницу из 101 012-страничной таблицы с диска в случае, когда максимальная память диска ограничена 256 мегабайтами. Каждый диск в среднем выполнял 300 операций ввода-вывода в секунду, выбирая 8KB за 1 чтение. Может показаться, что 300 операций ввода-вывода в секунду - это довольно много для диска со скоростью вращения 15K. Однако средняя длина очереди была равна 40 на диск, и данные были распределены на пространстве около 0.8 гигабайт из 32 гигабайт дискового пространства. Большая длина очереди позволяет диску менять последовательность операций ввода-вывода, а небольшое использование дискового пространства уменьшает среднюю дистанцию, которую проходит головка диска - оба этих фактора увеличивают производительность ввода-вывода. При конфигурации памяти в 1154 мегабайта, т.е. с достаточным количеством памяти для хранения в ней всей таблицы и обоих индексов, как только данные загружаются в память, дисковая активность у всех четырех запросов прекращается. Скорость сканирования таблицы, находящейся в памяти, составляющая примерно 93 000 страниц в секунду, является ожидаемой производительностью процессора Xeon 2.4GHz (с максимальной степенью параллелизма, равной 1), где затраты на 1 страницу при сканировании таблицы составляют примерно 25K циклов процессора. И план Index Seek, и план Bookmark Lookup требуют гораздо меньших затрат, чем сканирование таблицы, когда все данные находятся в памяти. Bookmark Lookup для последовательных строк работает примерно в 4 раза быстрее, чем табличное сканирование, а для разнесенных строк работает почти в 3 раза быстрее, чем табличное сканирование. Формула расчета затрат для плана выполнения (>1 гигабайта) оценивает поиск по индексу, сопровождаемый bookmark lookup, как в 3.6 раза более затратный (по времени выполнения), чем табличное сканирование. Затраты плана выполнения не учитывают такие факторы, как находятся ли данные уже в памяти, могут ли данные поместиться в памяти, хотя эти факторы имеют огромное влияние на затраты ресурсов на выполнение запроса. Для SQL Server вполне оправданно не учитывать расположение данных, потому что статистика SQL Server содержит эту информацию. Когда все данные должны читаться с диска, действительные затраты на табличное сканирование, использующее последовательное чтение с диска, оказываются в 16 раз меньше, чем затраты на план выполнения с поиском по индексу и с bookmark lookup с операциями ввода-вывода для произвольно расположенных данных. Сравните это с преимуществом в 3.6 раза, которое было предсказано формулой расчета затрат плана выполнения. Использованный здесь диск со скоростью вращения 15K RPM имеет примерно в 2 раза большую производительность произвольного ввода-вывода, чем диск со скоростью вращения 7200RPM, доступный 8 лет назад, но он еще имеет и в 8 раз большую производительность последовательного чтения по сравнению со старыми дисками. Вполне возможно, что старый диск 7200RPM действительно выдал бы именно такой результат, который был предсказан формулой плана выполнения. Если количество дисков увеличить, то и последовательная, и произвольная производительность операций ввода-вывода увеличится примерно на одно и то же значение. Когда есть достаточно дисков для достижения уровня последовательной передачи данных в 800Mб/сек. (в 10 раз больше, чем текущая скорость передачи данных), производительность табличного сканирования ограничится скоростью работы процессора. Однако есть хорошие основания полагать, что дальнейшее увеличение количества дисков увеличит производительность произвольного ввода-вывода до 10 000 операций в секунду. (Продолжение следует) Статьи на русском языке
Параметризованные запросы ADO.NET - средство защиты от SQL Injection атак
Extracting a String Within Delimeters - Part 2 Самые популярные темы недели
Ваше мнение об упражнениях SELECT на http://sql.ipps.ru
Republish in Merge Replication
|
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.winsoft.sqlhelpyouself |
Отписаться |
В избранное | ||