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

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


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

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

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

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

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

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


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

§ Усилил проверку задачи 51, добавив вариант проверочных данных, который предложил JohnT.

§ Изменений в стане лидеров:
pvv, решив две задачи третьего этапа - 140 и 141, вошел в десятку (8 место).

§ Новые лица в ТОР 100 и вернувшиеся туда:
man2 (задач 125, время 51.644)
Чумазик (125, 58.661)
iglbeat (124, 17.994)
Bulldozer (123, 199.969)

§ Продвинулись в рейтинге:
avk (137, 61.653)
raul (133, 17.798)
AlexFJ (127, 126.191)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
zjor (121, 89.776)
Артём С. (118, 5.546)
CasperGhost (117, 52.768)
nadush (116, 120.589)
Лори (111, 20.975)

§ На этой неделе сертифицированы:
alex55 (A07023065) [BK] - г.Москва, Россия
sCandal (A07008034) [BK] - г. Худжанд, Таджикистан
Serj_80 (A07025200) [BK] - г.Москва, Россия
Bot (A07016474) [BK] - г.Санкт-Петербург, Россия

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Белогурова К. (Katy_Ekb) 143 143 21 346 155 9.563 4.673 18 27 Oct 2007 11 Dec 2007
2 Креславский О.М. (Arcan) 143 143 21 346 269 17.514 7.720 18 26 Oct 2007 21 Dec 2007
3 Карасёва Н.В. (vlksm) 143 143 21 346 529 38.118 12.414 18 17 Oct 2007 21 Dec 2007
4 Голубин Р.С. (Roman S. Golubin) 143 143 21 346 795 69.101 43.885 18 22 Oct 2007 21 Dec 2007
5 Северюхин Ю.А. (Venser) 142 142 21 342 200 4.950 .655 14 19 Sep 2007 27 Nov 2007
6 Тарасов Д.Б. (Gavrila) 142 142 21 342 755 23.423 2.501 14 20 Sep 2007 21 Dec 2007
7 Солдатенков Ю.С. (SolYUtor) 142 142 21 342 490 17.853 2.695 14 20 Sep 2007 21 Dec 2007
8 Печатнов В.В. (pvv) 142 140 21 342 62 15.622 2.768 14 20 Dec 2007 21 Dec 2007
9 Шептунов П.П. (Dzen) 142 142 21 342 279 8.186 3.499 14 02 Oct 2007 15 Nov 2007
10 Мурашкин И.В. (lepton) 142 142 21 342 544 15.800 5.539 14 18 Sep 2007 19 Dec 2007
11 Мальцев А.В. (Палкин) 142 142 21 342 422 49.738 7.690 14 13 Oct 2007 20 Nov 2007
12 Васьков Е.В. (Johan) 142 141 21 342 493 14.350 12.767 14 24 Nov 2007 30 Nov 2007
13 Бураков С.Г. (burakov58) 142 142 21 342 974 51.702 19.814 14 30 Sep 2007 09 Nov 2007
14 Агапов В. (KERBEROS) 135 141 20 326 89 6.143 1.262 11 20 Nov 2006 27 Jul 2007
15 Кувалкин К.С. (Cyrilus) 139 141 20 334 1014 12.506 2.519 11 04 Sep 2007 18 Dec 2007
16 Зверев Д.Л. (dimzv) 138 68 21 334 1503 9.374 4.938 11 16 Dec 2007 16 Dec 2007
17 Войнов П.Е. (pаparome) 141 142 21 338 765 2.788 .049 10 28 Sep 2007 21 Dec 2007
18 Любченко В.А. (IAS56) 141 142 21 338 377 177.859 20.130 10 16 Sep 2007 20 Dec 2007
19 Валуев Д.И. (Fiolent) 141 139 21 338 1547 122.201 66.360 10 29 Nov 2007 14 Dec 2007
20 Юлдашев М.Р. (Snowbear) 140 142 21 334 874 4.350 .188 6 09 Dec 2007 21 Dec 2007

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Петренко Г.А. (Pilgrim_) 48 57 93 2 95 1200 21 Dec 2007
2 >Гарбузов (denis_g) 38 38 71 17 88 1847 21 Dec 2007
3 Михайлов И.О. (WP*Uropb) 30 59 58 19 77 877 19 Dec 2007
4 > T.P. (Fulkman) 32 32 60 5 65 2782 21 Dec 2007
5 Панов О.Л. (OL71) 12 71 27 34 61 401 21 Dec 2007
6 hidden (man2) 22 125 57 0 57 84 20 Dec 2007
7 Озиев М. (EXisTAnZ) 18 53 34 23 57 974 21 Dec 2007
8 >Рожков (АлексейПР) 31 31 56 0 56 3382 21 Dec 2007
9 >Ноева Т.В. (kapriz) 29 29 53 3 56 3384 21 Dec 2007
10 >Шахов В.А. (robotodel) 29 61 53 0 53 1177 21 Dec 2007
11 Karapetyan (IKM) 27 27 46 5 51 3821 17 Dec 2007
12 Архипов С.С. (sese) 10 37 23 25 48 1529 19 Dec 2007
13 Musoyan V. (vahem) 25 60 45 0 45 646 18 Dec 2007
14 >Kwiatkowski (Aramaki) 7 55 11 34 45 748 21 Dec 2007
15 Надравецкая А.М. (Надравецкая Анна) 21 49 43 0 43 1714 21 Dec 2007
16 Piliposyan Astghik (Slesh) 24 24 38 5 43 4522 21 Dec 2007
17 >Baghdasaryan N. (Archie Goodwin) 19 19 26 17 43 4523 21 Dec 2007
18 >C P.C. (prabhavathi) 10 44 22 17 39 1542 21 Dec 2007
19 >Смирнов Л. (zhivchik) 24 24 39 0 39 4828 21 Dec 2007
20 Ефремов Д. (deni) 8 30 21 17 38 2465 21 Dec 2007
21 >Rutkowski S. (s_rutkowski) 19 26 38 0 38 4386 21 Dec 2007
22 >Шарапова А. (evilmachine) 15 30 37 0 37 3484 21 Dec 2007
23 Publexus (Publexus) 1 57 2 34 36 694 21 Dec 2007
24 Komar S. (JohnyBravo) 12 24 27 9 36 4119 19 Dec 2007
25 >Lysenko A.V. (TurASS) 23 23 36 0 36 5195 21 Dec 2007
26 >Zelenkov R.V. (RZelenkov) 23 23 36 0 36 5205 21 Dec 2007
27 Topchyan T. (tigertop89) 12 29 30 5 35 2084 17 Dec 2007
28 binh L.N. (binhle) 22 22 34 1 35 5413 21 Dec 2007

Изучаем SQL

Перестройка индексов онлайн в SQL Server 2005

Tim Chapman (оригинал: Rebuild indexes online with SQL Server 2005 )
Перевод Моисеенко С.И.

Индексы - это специализированные структуры данных, которые механизм доступа к данным в таблицах (а иногда в представлениях) использует для ускорения поиска и сортировки данных. Индексы жизненно важны для быстрого возвращения результатов запроса движком баз данных. По мере изменения данных в базовых таблицах, на которых созданы индексы, последние становятся фрагментированными. Фрагментация - это ситуация, когда логический порядок следования записей в индексе не соответствует физическому порядку базовой таблицы или представления. Чем более индексы становятся фрагментированными, тем медленнее начинают выполняться запросы. Решением проблемы в SQL Server 2005 является либо реорганизация, либо перестройка индекса.

Реорганизация или перестройка?

Фрагментированные индексы могут быть сделаны "нефрагментированными" двумя способами: они могут быть реорганизованы или перестроены. Реорганизация индекса вызывает переупорядочивание данных в наиболее удаленных страницах данных и уплотняет индекс. Никакие дополнительные данные не добавляются в индекс при реорганизации, поэтому индекс может остаться несколько фрагментированным. Операция не потребляет много ресурсов системы и может происходить, когда внешние процессы получают доступ к таблице, на которой работает этот индекс. Поэтому мы говорим в этом случае об "онлайновой' операции.

Перестройка индекса по существу уничтожает индекс и создает новый. Любая фрагментация, которая была в старом индексе, устраняется, и логический порядок нового индекса соответствует физическому порядку. Вследствие того, что индекс удаляется и создается вновь, внешние процессы не в состоянии получить доступ к таблице, что отрицательно сказывается на производительности. Фактически, другие процессы не будут в состоянии вообще заблокировать таблицу, пока идет процесс перестройки индекса. Это - главный недостаток перестройки индексов.

Перестройка индексов онлайн

В SQL Server 2005 появилась возможность перестаивать индексы в онлайн манере так, чтобы другие процессы могли быть в состоянии получить доступ к таблице во время перестройки индексов. Поскольку Вы можете получать доступ к индексам во время перестройки, Вы не ограничены при выполнении перестройки индексов только часами минимальной нагрузки на сервер.

Чтобы добиться этого, механизм базы данных предпринимает некоторые специальные действия, позволяющие перестраивать индекс и одновременно разрешать доступ к нему. Исходный индекс остается доступным для пользователей для выполнения чтения и модификации данных. Используется версионность строк, чтобы учесть последовательность транзакций. При перестройке создается новый индекс, который повторяет старый индекс. Любые модификации данных, которые изменяют оригинальный индекс, будут также применены к этому индексу SQL Server в процессе перестройки. Этот новый индекс вообще не читается - работает только на запись. Существенно, что Вы должны иметь достаточный объем свободного дискового пространства, чтобы хранить данные для двух параллельно существующих индексов в течение онлайн перестройки. В процессе перестройки SQL Server использует индекс отображения, чтобы определять записи, которые нужно модифицировать в новом индексе, когда их модификация происходит в исходном индексе. Как только процесс перестройки завершается, любые запросы или модификации данных переключаются на новый индекс, а исходный индекс удаляется.

Пример

Процедура перестройки индекса онлайн почти не отличается от типичной процедуры перестройки; однако есть несколько способов выполнить перестройку. Один способ состоит в том, чтобы просто удалить имеющийся индекс, используя оператор DROP INDEX, с последующим выполнением CREATE INDEX. Перестройка индексов таким способом оставляет таблицу без индекса до тех пор, пока индекс не будет полностью создан. По этой причине (и множеству других причин), удаление индекса и повторное его создание не рекомендуется.

Оператор CREATE INDEX все же может использоваться для перестройки индексов с опцией DROP_EXISTING. Эта возможность позволяет менять определение указанного индекса, и позволяет администратору базы данных изменять местоположение индекса, перенося его в другую файловую группу или раздел.

Оператор ALTER INDEX позволяет перестроить кластерный и все некластерные индексы на таблице. Недостаток этого оператора состоит в том, что Вы не можете изменить определение индекса. Оба эти оператора имеют опции, позволяющие перестраивать индексы онлайн.

Следующий оператор перестраивает кластерный индекс (на столбце SaleID) для таблицы SalesHistory. Существующий индекс удаляется в этом процессе, однако он будет доступен в течение операции, поскольку задана опция ONLINE.

 

CREATE CLUSTERED INDEX cl_SalesHistory_SaleID ON SalesHistory(SaleID)
 WITH(DROP_EXISTING = ON, ONLINE = ON)

 

Этот оператор весьма похож на предыдущий, но он изменяет имеющееся определение индекса, включая в индекс дополнительный столбец. Индекс перестраивается тем же самым способом.

 

CREATE CLUSTERED INDEX cl_SalesHistory_SaleID ON SalesHistory(SaleID ASC, SaleDate ASC)
 WITH(DROP_EXISTING = ON, ONLINE = ON)

 

Используя оператор ALTER INDEX, я могу перестроить все индексы на указанной таблице. Синтаксическая конструкция ONLINE имеет тот же смысл, что и для оператора CREATE INDEX. Эта новая конструкция заменяет оператор DBCC DBREINDEX, которая использовалась для этой цели в предыдущих версиях SQL Server

 

ALTER INDEX ALL ON SalesHistory
 REBUILD WITH(ONLINE = ON)

 

Этот оператор перестраивает кластерный индекс на таблице SalesHistory. Опция ONLINE опущена, что означает, что таблица не будет доступна в процессе операции перестройки.

 

ALTER INDEX cl_SalesHistory_SaleID ON SalesHistory
 REBUILD

 

Этот оператор аналогичен предыдущему, но перестройка будет выполнена онлайн, т.е. доступ к таблице не будет закрыт.

 

ALTER INDEX cl_SalesHistory_SaleID ON SalesHistory
 REBUILD WITH(ONLINE = ON)

 

Заключение

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

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

10-12-2007

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

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

§ Желающих поспособствовать популяризации сайта прошу проголосовать/поставить закладку в социальных сетях:
del.icio.us
dzone.com
Digg.com
Reddit.com
stumbleupon.com

Контакты

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

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

В избранное