Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Новости сайта "Упражнения по SQL" (http://www.sql-ex.ru) 110


Новости сайта "Упражнения по SQL (http://www.sql-ex.ru)" Выпуск 110 (21 октября 2006 г.)

http://www.sql-ex.ru

Новым посетителям сайта

Сайт посвящен изучению языка, с помощью которого осуществляется взаимодействие с реляционными (и не только) СУБД. Суть обучения состоит в выполнении заданий на написание запросов к учебным базам данных; при этом система контролирует правильность выполнения заданий. В настоящее время реализованы все операторы подъязыка манипуляции данными (DML), которые включают в себя оператор извлечения данных SELECT, а также операторы модификации данных - INSERT, DELETE и UPDATE.

Мы надеемся, что справочного материала сайта окажется достаточно для самостоятельного обучения. Кроме того, свои решения вы можете обсудить на форуме сайта. Опытных же специалистов приглашаем проверить (продемонстрировать) свое мастерство и принять участие в соревновании, обеспечиваемом рейтинговой системой учета времени выполнения заданий. Фактически, рейтинг ведется на втором этапе тестирования, который начинается сейчас после решения 58-ти задач первого этапа. При подсчете рейтинга каждого участника отбрасывается один самый худший показатель среди всех решенных им упражнений.

Демонстрация плана выполнения запроса и сравнительная оценка эффективности решений поможет вам освоить принципы оптимизации запросов.

Имеется возможность получить сертификат по SQL DML при выполнении определенного количества заданий.


Новости сайта

§ Начал адаптировать систему под используемый на сервере SQL2005. Теперь участникам третьего этапа разрешено использовать CTE (общие табличные выражения) для решения любых задач. Т.к. с помощью CTE некоторые сложные задачи второго этапа можно решить относительно просто, то с целью соблюдения равных условий для всех участников, участникам, находящимся на первых двух этапах, использовать эти выражения не разрешается.
Однако чтобы не принижать обучающую составляющую сайта любому участнику можно:
- использовать CTE для оценки плана выполнения запросов на странице perfcon.php;
- использовать CTE на странице с упражнениями при установленном флажке "Без проверки".
Просьба сообщать разработчикам, если поведение системы будет отличаться от заявленного.

§ Как я и предсказывал, KERBEROS решил последнюю задачу и занял первую позицию в рейтинге, показав на третьем этапе результат менее суток (баллов 7, время .907).
Roman S. Golubin стал пятым участником, который решил все задачи (7, 23.652).

§ Cyrilus дорешал задачи второго этапа (задач 138, время 9.892) и, хотя задачи третьего этапа были ему доступны и до этого, выжидает :-).
На этой неделе вплотную подошли к третьему этапу Dizil(137, 3.961), PS_Sergey (137, 9.290) и alex_v (137, 22.788).

§ Продолжили свое восхождение к вершине:
yaff (135, 14.853)
=Maxim= (130, 19.716)
IAS (124, 81.996)
FanOfBeer (123, 79.163)
Galya (115, 29.771)
Родион1976 (113, 1.126)
Fencer (109, 98.698)

Родион1976 сохраняет свои позиции и по-прежнему является лидером на достигнутом промежуточном уровне.
Он уже предложил свою задачу, которую я пока отложил, опасаясь повтора идей. Подожду, когда новый автор пройдет задачи, которые могут оказаться аналогичными.

§ На этой неделе сертифицированы:
yna (A06013073) [BK] (г.Санкт-Петербург, Россия)
TODD (A06013296) [BK] (г.Пермь, Россия)
Prince (A06013593) [BK] (г.Москва, Россия)
Damirishe (A06013325) [BK] (г.Челябинск, Россия)

§ Число подписчиков - 3344

Число участников рейтинга - 7412

Число участников второго этапа - 725

Сертифицировано на сайте - 111

Лучшие результаты (ТОР 20)

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Агапов В. (KERBEROS) 140 140 20 329 52 5.819 .907 7 14 Oct 2006 20 Oct 2006
2 Карасёва Н.В. (vlksm) 140 140 20 329 151 27.838 2.709 7 04 Oct 2006 20 Oct 2006
3 Мурашкин И.В. (lepton) 140 140 20 329 199 13.712 3.581 7 08 Oct 2006 20 Oct 2006
4 Васьков Е.В. (Johan) 140 140 20 329 85 12.705 11.402 7 12 Oct 2006 20 Oct 2006
5 Голубин Р.С. (Roman S. Golubin) 140 139 20 329 425 44.826 23.652 7 17 Oct 2006 20 Oct 2006
6 Войнов П.Е. (pаparome) 139 140 20 326 407 2.687 .000 4 05 Oct 2006 20 Oct 2006
7 Юлдашев М.Р. (Snowbear) 139 139 20 325 441 4.106 .000 3 02 Oct 2006 17 Oct 2006
8 Держальцев В.А. (MadVet) 139 139 20 325 540 34.249 3.085 3 08 Oct 2006 19 Oct 2006
9 Кувалкин К.С. (Cyrilus) 138 107 20 322 691 9.892 .000 0 16 Oct 2006 20 Oct 2006
10 Валуев Д.И. (Fiolent) 138 138 20 322 1125 54.696 .000 0 03 Oct 2006 20 Oct 2006
11 Slobodcicov A.N. (Testo) 137 138 20 320 337 7.171 .000 0 25 Aug 2006 16 Oct 2006
12 Иванов А.Н. (Goapsy) 137 138 20 320 270 18.911 .000 0 07 Aug 2006 09 Oct 2006
13 Зверев Д.Л. (dimzv) 137 137 20 318 1070 3.663 .000 0 09 Oct 2006 09 Oct 2006
14 Абашин П.И. (Dizil) 137 107 20 318 420 3.961 .000 0 18 Oct 2006 18 Oct 2006
15 Палий С.А. (PS_Sergey) 137 137 20 318 166 10.215 .000 0 16 Oct 2006 17 Oct 2006
16 Мальцев А.В. (Палкин) 137 137 20 318 56 15.229 .000 0 12 Oct 2006 20 Oct 2006
17 >Вязовецков А.С. (alex_v) 137 137 20 318 141 22.788 .000 0 20 Oct 2006 20 Oct 2006
18 Тарасов Д.Б. (Gavrila) 136 138 20 317 402 19.425 .000 0 02 Oct 2006 19 Oct 2006
19 Самохвалов В. (ValdemarES) 136 137 20 316 273 7.848 .000 0 17 Aug 2006 13 Oct 2006
20 Солдатенков Ю.С. (SolYUtor) 136 137 20 316 111 12.905 .000 0 06 Sep 2006 20 Oct 2006

Лучшие результаты за неделю

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Башаримов В.Н. (D2NX) 78 78 150 32 182 220 20 Oct 2006
2 >Рябцев С. (Snarky) 59 59 109 32 141 396 20 Oct 2006
3 Иванов (_AndAim_) 54 54 98 28 126 583 20 Oct 2006
4 Ковальчук В. (valkov) 54 54 99 26 125 596 20 Oct 2006
5 >Самылкин А.Н. (Sam Andrews) 47 47 80 9 89 1151 20 Oct 2006
6 >Виноградов С.М. (Botch) 24 64 54 32 86 349 20 Oct 2006
7 >Golopupenko (Katzman) 35 58 73 9 82 666 20 Oct 2006
8 Бирюков И.А. (igor_b) 39 46 76 0 76 1271 20 Oct 2006
9 >John M. (John Megi) 44 44 76 0 76 1436 20 Oct 2006
10 Пронин Р.В. (major) 43 43 73 2 75 1462 18 Oct 2006
11 >Puzyrenko A. (_=ALEXIS=_) 41 41 74 0 74 1492 20 Oct 2006
12 >Фалелеев Д.А. (Dmitry Faleleev) 33 78 71 0 71 219 20 Oct 2006
13 Ананьев А.С. (Mureno) 38 38 58 3 61 1868 18 Oct 2006
14 >klyg K.K. (klyg) 34 34 60 0 60 1915 20 Oct 2006
15 >Ефимец Д.Е. (Gremlin) 37 37 59 0 59 1960 20 Oct 2006
16 >Волков А.Ю. (valex847) 14 70 29 29 58 278 20 Oct 2006
17 >Ищенко (Arche) 33 33 58 0 58 1984 20 Oct 2006
18 >Senn (senn) 32 32 57 0 57 2050 20 Oct 2006
19 >Белкин С.Н. (SIR) 31 31 56 0 56 2087 20 Oct 2006
20 Трефилов А. (Aladdin) 29 29 52 0 52 2230 19 Oct 2006
21 >Крутицкий К.В. (lirik) 29 29 52 0 52 2249 20 Oct 2006
22 Antaeus (Antaeus) 25 34 50 0 50 1802 17 Oct 2006
23 >Кальбагаев С.Д. (Sayka) 13 56 30 17 47 639 20 Oct 2006
24 Еремин А.В. (@ntony) 20 44 41 0 41 1413 19 Oct 2006
25 Rozhok Y.V. (yuriy.rozhok) 18 33 41 0 41 2016 19 Oct 2006
26 >garine R. (ramug) 24 24 40 0 40 2798 20 Oct 2006

Изучаем SQL

Настройка производительности Microsoft T-SQL. Часть 1: Анализ и оптимизация производительности запросов T-SQL, используя SET и DBCC
(продолжение, начало в вып.109)

Kevin Kline, Quest Software, Inc. (оригинал: Microsoft T-SQL Performance Tuning. Part 1: Analyzing and Optimizing T-SQL Query Performance on Microsoft SQL Server using SET and DBCC)
Перевод Живенко Н.

ТАБЛИЧНАЯ И ИНДЕКСНАЯ ФРАГМЕНТАЦИЯ

Существует несколько доступных команд, которые могут вам помочь получить дескриптор табличной или индексной фрагментации: DBCC SHOWCONTIG, DBCC INDEXDEFRAG, DBCC DBREINDEX и CREATE/DROP INDEX.

Табличная фрагментация подобна фрагментации жесткого диска, которая происходит на любом компьютере после создания, удаления или изменения файлов. Таблицы базы данных, также как и диски, время от времени нуждаются в дефрагментации для поддержания эффективности. Наибольшая эффективность достигается, когда все страницы занимают непрерывную область в базе данных, но спустя недели работы таблица может разбиться на сегменты, расположенные в разных местах на диске. Чем больше таких сегментов, тем менее эффективной становится таблица.

Команда DBCC SHOWCONTIG помогает решить, когда необходимо обновить кластеризованный индекс. Эта команда выводит информацию о табличной фрагментации и может также помочь определить правильное время обновления кластеризованного индекса, таким образом, уменьшив фрагментацию таблицы.

Эта команда DBCC следующий синтаксис:

DBCC SHOWCONTIG ( table [, index ] )

Можно использовать либо имя таблицы и имя индекса, либо номера идентификаторов таблицы и индекса. Например:

USE northwind
GO
DBCC SHOWCONTIG ( [Order Details], OrderID )
GO

Результаты:

DBCC SHOWCONTIG scanning 'Order Details' table...
Table: 'Order Details' (325576198); index ID: 2, database ID: 6
LEAF level scan performed.
- Pages Scanned................................: 5
- Extents Scanned..............................: 2
- Extent Switches..............................: 1
- Avg. Pages per Extent........................: 2.5
- Scan Density [Best Count:Actual Count].......: 50.00% [1:2]
- Logical Scan Fragmentation ..................: 0.00%
- Extent Scan Fragmentation ...................: 50.00%
- Avg. Bytes Free per Page.....................: 2062.0
- Avg. Page Density (full).....................: 74.52%
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Статистические данные, возвращаемые командой DBCC объясняются в следующей таблице.

Статистические данные ОПИСАНИЕ
Pages Scanned Число страниц базы данных используемые таблицей (когда задано значение идентификатора индекса 1 или 0) или некластеризованным индексом (когда задано значение >1)
Extent Switches Все страницы таблицы или индекса связаны в цепочку. Доступ к таблице или индексу более эффективен, когда все страницы каждого экстента связаны в сегмент этой цепочки. Команда DBCC сканирует цепочку страниц и подсчитывает, сколько раз необходимо переключаться между экстентами. Если число переключений между экстентами превышает число страниц, деленное на 8 раз, значит это повод для оптимизации.
Avg. Pages per Extent Для каждой таблицы память выделяется экстентами по 8 страниц. Некоторые страницы не используются, т.к. таблица никогда не увеличивалась во время использования или потому что строки были удалены из страницы. Чем ближе это число к 8, тем лучше. Меньшее число указывает, что существует много неиспользуемых страниц, что уменьшает производительность доступа к таблице.
Scan Density [Best Count: Actual Count] Scan Density показывает насколько фрагментирована таблица. Предельное значение 100% является наилучшим. Все что меньше 100% говорит о фрагментации. Best Count показывает идеальное число переключений между экстентами, которое может быть достигнуто для этой таблицы. Actual Count показывает фактическое число переключений между экстентами.
Logical Scan Fragmentation Процентное отношение неупорядоченных страниц, возвращаемых сканированием листовых страниц индекса. Это считывание не касается кучи (таблиц без индексов любого типа) и индексов для типа text. Страница считается неупорядоченной, когда следующая страница в карте размещения индекса (Index Allocation Map, IAM) отличается от страницы, определяемой указателем на следующую страницу в листовой странице.
Extent Scan Fragmentation Процент неупорядоченных экстентов при сканировании листовых страниц индекса, за исключением кучи. Экстент считается неупорядоченным, когда экстент, содержащий текущую страницу индекса, физически не следует за экстентом, содержащим предыдущую страницу индекса.
Avg. Bytes free per page Среднее число свободных байтов на страницу, используемую таблицей или индексом. Чем меньше число, тем лучше. Высокий показатель говорит о неэффективности использования пространства. Максимально возможное число свободного пространства составляет 2014 - размер страницы базы данных минус накладные расходы. Это число или близкое к нему будет отображаться для пустых таблиц. Для таблиц с большими строками это число может быть относительно высоким даже после оптимизации. Например, если размер строки - 1005 байтов, то на странице поместится только одна строка. DBCC также покажет среднее свободное пространство 1005 байтов, но это не означает, что другая строка поместится на эту же страницу. Для того чтобы, соответствовать строке в 1005 байтов вам также необходимо добавить участок памяти для системной информации.
Avg. Page density (full) Насколько заполнена средняя страница. Число близкое к 100% является наилучшим. Это число связано с предыдущим показателем, и зависит от размера строки, а также коэффициент заполнения кластеризованного индекса (fill-factor). Транзакции, выполняемые над строками таблицы изменяют это число, т.к. они производят удаление, вставку или перемещение строк при обновлении ключей.

Для того чтобы выполнить дефрагментацию таблицы, удалите и создайте на ней заново кластеризованный индекс. Удаление и повторное создание кластеризованного индекса, также пересоздаст все некластеризованные индексы таблицы. Другим методом дефрагментации таблицы является команда DBCC INDEXDEFRAG. Эта команда переупорядочит страницы на листовом уровне индекса в соответствии с логическим порядком, также удаляя и пересоздавая кластеризованный индекс. Однако DBCC INDEXDEFRAG имеет ряд преимуществ. Это онлайновая операция, сохраняющая индекс и таблицу доступными другим пользователям при выполнении команды. Она также выдерживает прерывания без потери результатов уже проделанной к этому времени работы. Ее недостаток - то, что она не очень хорошо работает при реорганизации данных, как операция удаления/пересоздания индекса. Синтаксис этой команды следующий:

DBCC INDEXDEFRAG
( { database | 0 } ,{ table | 'view' } ,{ index } ) [ WITH NO_INFOMSGS ]

При определении базы данных, таблицы, представления или индекса, которые вы бы хотели дефрагментировать, можно использовать либо имя объекта, либо его идентификатор. (Можно использовать нуль вместо имени базы данных или ее идентификатора, что будет означать текущую базу данных). Например:

DBCC INDEXDEFRAG (Pubs, Authors, Aunmind)
GO

Результаты:

Pages Scanned Pages Moved Pages Removed
------------------ ---------------- -------------------
359                          346                         8
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Другая команда, доступная для дефрагментации таблиц и индексов - DBCC DBREINDEX. В отличие от DBCC INDEXDEFRAG, эта команда блокирует используемую таблицу и делает ее недоступной для всех других пользователей во время перестройки индекс. Команда имеет следующий синтаксис:

DBCC DBREINDEX
( ['database.owner.table_name' [,index_name [,fillfactor] ] ]
) [ WITH NO_INFOMSGS ]

Например:

DBCC DBREINDEX ('pubs.dbo.authors')

Если статистические данные далеки от идеальных, вы можете попросить вашего администратора базы данных заново создать кластеризованный индекс для таблицы, чтобы "освежить" его. Даже для таблиц, которые не имеют кластеризованного индекса, может быть полезно создать фиктивный индекс, а затем удалить его.

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

(Продолжение следует...)

Полезная информация

§ В очередной Премии Рунета каждый посетитель может проголосовать за 12 понравившихся ему ресурсов.
Если вы решитесь принять участие в голосовании, надеюсь, что среди 12 ваших предпочтений найдется место и нашему сайту :-).

§ Все статьи, публикуемые в рассылке, затем выкладываются на сайте Книги и статьи по SQL.

§ Поступила в продажу книга SQL. Задачи и решения, посвященная анализу ошибок, допускаемых при решении задач первого этапа. На сайте издательства Питер можно сделать заказ и познакомиться с содержанием.

Контакты

По всем вопросам, связанным с функционированием сайта, проблемами при решении упражнений, идеями вы можете обращаться к Сергею И.Моисеенко msi77@yandex.ru. Вы также можете предложить свои задачи для публикации на сайте.

Подписка Subscribe.Ru
Новости сайта "Упражнения по SQL"

В избранное