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

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


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

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

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

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

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

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


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

§ Как-то в суете и заботах незамеченным прошел юбилей - сайту 5 лет. Так что поздравляю вас! :-)

§ Новая задача, которая выставлена под номером 143, вероятно, на выходных будет перемещена.
Большинство решивших ее высказалось за размещение задачи в конце второго этапа. Так и поступлю.
Соответственно сдвинется вниз и задача, которую она заменит.

§ Одна задача до третьего этапа осталась Barsyk (задач 137, время 2.474). Это третий промежуточный результат после paparome и Inuyasha.

§ Продвинулись в рейтинге:
avk (137, 60.668)
Fencer (137, 200.423)
7_x_F1WC (136, 48.005)
SoVa (136, 241.164)
runaway (131, 15.128)
Shadow77 (128, 10.133)
-=ac=- (125, 45.031)
lexaNRJ (121, 66.784)

§ На этой неделе сертифицированы:
Capitan_Jack (A07005274) [BK] - г.Астана, Казахстан
Shadow77 (B07021164) [AR] - г.Валки, Украина

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Северюхин Ю.А. (Venser) 143 143 21 344 200 4.954 .688 16 19 Sep 2007 20 Sep 2007
2 Солдатенков Ю.С. (SolYUtor) 143 143 21 344 490 17.864 2.758 16 20 Sep 2007 21 Sep 2007
3 Тарасов Д.Б. (Gavrila) 143 143 21 344 755 23.471 3.585 16 20 Sep 2007 21 Sep 2007
4 Мурашкин И.В. (lepton) 143 143 21 344 544 15.808 5.609 16 18 Sep 2007 21 Sep 2007
5 Карасёва Н.В. (vlksm) 143 143 21 344 496 31.642 6.013 16 14 Sep 2007 21 Sep 2007
6 Голубин Р.С. (Roman S. Golubin) 143 143 21 344 761 59.422 38.237 16 18 Sep 2007 21 Sep 2007
7 Шептунов П.П. (Dzen) 142 142 21 342 257 8.138 3.499 14 10 Sep 2007 17 Sep 2007
8 Мальцев А.В. (Палкин) 142 142 21 342 388 28.484 7.690 14 09 Sep 2007 16 Sep 2007
9 Любченко В.А. (IAS56) 142 143 21 340 377 177.881 21.207 12 16 Sep 2007 18 Sep 2007
10 Агапов В. (KERBEROS) 136 141 20 328 89 6.154 1.262 11 20 Nov 2006 27 Jul 2007
11 Кувалкин К.С. (Cyrilus) 140 141 20 336 1014 12.523 2.519 11 04 Sep 2007 19 Sep 2007
12 Зверев Д.Л. (dimzv) 136 141 20 328 1141 9.287 4.938 11 19 Dec 2006 22 Dec 2006
13 Войнов П.Е. (pаparome) 141 142 21 338 747 2.769 .049 10 10 Sep 2007 14 Sep 2007
14 Бураков С.Г. (burakov58) 141 142 21 338 957 34.467 4.901 10 13 Sep 2007 21 Sep 2007
15 Васьков Е.В. (Johan) 139 140 21 334 402 12.746 11.402 7 25 Aug 2007 25 Aug 2007
16 Юлдашев М.Р. (Snowbear) 140 143 21 333 791 4.166 .038 5 17 Sep 2007 21 Sep 2007
17 Креславский О.М. (Arcan) 140 143 21 333 227 10.116 .477 5 14 Sep 2007 21 Sep 2007
18 Валуев Д.И. (Fiolent) 139 140 21 332 1476 117.124 62.302 4 19 Sep 2007 21 Sep 2007
19 Утёнков М.Н. (=Maxim=) 138 139 21 330 459 25.173 .036 3 05 Aug 2007 08 Sep 2007
20 Держальцев В.А. (MadVet) 133 139 20 319 540 34.168 3.085 3 08 Oct 2006 19 Oct 2006

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 afa S.S. (sqlsrv) 95 95 192 0 192 305 20 Sep 2007
2 >Шагапова Р. (IrishkaS) 55 55 107 0 107 1163 21 Sep 2007
3 altneval (altneval1) 40 40 76 11 87 1713 18 Sep 2007
4 Саянкин Д.А. (conor) 25 59 50 34 84 571 20 Sep 2007
5 Baster (Retsab) 39 39 71 8 79 1923 21 Sep 2007
6 Грачев Я.Ю. (Phantom) 37 37 70 0 70 2257 21 Sep 2007
7 >Кравченко (Lexs) 31 31 58 9 67 2406 21 Sep 2007
8 >Гринев (Кровь) 37 37 67 0 67 2411 21 Sep 2007
9 Семесько И. (IRIS) 36 36 63 3 66 2455 21 Sep 2007
10 >Замосковный (biezo) 33 33 62 0 62 2647 21 Sep 2007
11 Кондратьев Е.Ю. (Serell) 30 30 54 3 57 2947 20 Sep 2007
12 Первушин А.С. (Arol...) 31 31 57 0 57 2949 21 Sep 2007
13 Парфенова Е. (linky) 30 30 56 0 56 3038 18 Sep 2007
14 Шулепин Е. (shuler) 26 50 54 0 54 1589 19 Sep 2007
15 >Трифонов П.Е. (paveltr) 28 28 50 3 53 3316 21 Sep 2007
16 >Егошин Ю.Б. (Yur4a) 29 29 53 0 53 3320 21 Sep 2007
17 >Санина Е.В. (Аленкас) 30 30 52 0 52 3354 21 Sep 2007
18 Kanunov A. (CaNoN) 17 34 39 11 50 2179 18 Sep 2007
19 >Левчук Д. (dimon121) 30 30 49 0 49 3595 21 Sep 2007
20 Баранникова А.Ю. (Lergana) 16 31 39 9 48 2417 20 Sep 2007
21 казанцев И.В. (ringo) 20 33 48 0 48 2671 19 Sep 2007
22 Нечай Т.С. (NSTanchik) 27 27 48 0 48 3680 20 Sep 2007
23 >Пачин П. (Pashua) 26 26 46 0 46 3848 21 Sep 2007
24 Мосейчук А. (Iskander) 26 26 46 0 46 3854 20 Sep 2007
25 >Тарасенко А. (-= Andreyka =-) 26 26 44 2 46 3860 21 Sep 2007
26 R S. (ksi) 17 36 42 0 42 2375 18 Sep 2007
27 Krasilnikov D. (priora) 17 30 42 0 42 2888 21 Sep 2007
28 Костюченко Ю.К. (YuRa_86) 12 25 27 15 42 3060 21 Sep 2007
29 Травинская (Narciss) 25 25 42 0 42 4112 19 Sep 2007
30 >Gerasimchuk S. (GerasimchukSerzh) 25 25 41 0 41 4185 21 Sep 2007
31 >Khairova (Emi) 16 38 40 0 40 1192 21 Sep 2007

Изучаем SQL

Как писать пользовательские файлы трассировки на T-SQL

Tim Chapman (оригинал: Write custom trace files in TSQL )
Перевод Моисеенко С.И.

Трассировка по умолчанию в SQL Server 2005 (перевод статьи смотрите в предыдущем выпуске рассылки - прим. перев.)- замечательное средство для мониторинга системной информации и выяснения причин того, что случилось с вашим сервером. Однако бывает, что события, которые перехватываются по умолчанию, не те, что вас интересуют. Здесь мы даем инструкции, как создать свои собственные файлы трассировки на T-SQL для перехвата событий на вашей машине баз данных.

SQL Server Profiler

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

Трассировки T-SQL

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

Обычно при работе с SQL Profiler создается трассировка, в которой события перехватываются на ограниченный срок. Вы можете запустить трассировку в SQL Profiler, а затем выйти из программы, сохранив выполнение трассировки, но я не рекомендую это делать. Если Вы собираетесь контролировать события в течение длительного периода времени (то есть обычно несколько дней) или нужно запустить трассировку, когда Вы не сидите за вашим ПК, предпочтительно запускать трассировку на сервере в T-SQL. Или же Вы можете создать хранимую процедуру, которая может выполняться, когда сервер стартует, что гарантирует, что трассировка всегда будет запущена.

Пример трассировки

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

 

 DECLARE @TraceID INT
 DECLARE @MaxSize bigint

 SET @MaxSize = 15

 EXECUTE sp_trace_create @TraceID output,
 @options = 2, --//сворачивает файл, когда достигается максимальный размер
 @tracefile = N'C:Tracefile.trc', --//имя файла трассы
 @maxfilesize = @MaxSize --//максимальный размер файла

 SELECT @TraceID --//выводим traceid для контроля

 

Данная процедура создает трассировку на сервере. Чтобы эта трассировка функционировала, я должен привязать к ней столбцы событий и данных, которые хочу контролировать. Есть только одна хранимая процедура, которую необходимо вызвать, чтобы привязать данные. Именно здесь может произойти недоразумение. Столбцы событий и данных передаются в хранимую процедуру как отдельные параметры и числовые значения - потребуется немного внимания для их определения. Следующая статья Microsoft дает полный список событий и связанных с ними столбцов данных.

В нашем примере, я хочу отслеживать время, когда хранимая процедура выполнялась удаленно, или когда выполнялся любой пакет T-SQL; эти события и столбцы - 10 и 12, соответственно. Что касается столбцов данных, то меня интересует, когда был сделан вызов и когда он завершился; как долго выполнялся запрос; где он выполнялся и что выполнялось. Столбцы данных, которые я определил ниже, будут содержать эту информацию:

 

DECLARE @On BIT
 SET @On = 1
 EXECUTE sp_trace_setevent @TraceID, 10, 15, @On
 EXECUTE sp_trace_setevent @TraceID, 10, 16, @On
 EXECUTE sp_trace_setevent @TraceID, 10, 1, @On
 EXECUTE sp_trace_setevent @TraceID, 10, 9, @On
 EXECUTE sp_trace_setevent @TraceID, 10, 17, @On
 EXECUTE sp_trace_setevent @TraceID, 10, 6, @On
 EXECUTE sp_trace_setevent @TraceID, 10, 10, @On
 EXECUTE sp_trace_setevent @TraceID, 10, 14, @On
 EXECUTE sp_trace_setevent @TraceID, 10, 18, @On
 EXECUTE sp_trace_setevent @TraceID, 10, 11, @On
 EXECUTE sp_trace_setevent @TraceID, 10, 12, @On
 EXECUTE sp_trace_setevent @TraceID, 10, 13, @On
 EXECUTE sp_trace_setevent @TraceID, 12, 15, @On
 EXECUTE sp_trace_setevent @TraceID, 12, 16, @On
 EXECUTE sp_trace_setevent @TraceID, 12, 1, @On
 EXECUTE sp_trace_setevent @TraceID, 12, 9, @On
 EXECUTE sp_trace_setevent @TraceID, 12, 17, @On
 EXECUTE sp_trace_setevent @TraceID, 12, 6, @On
 EXECUTE sp_trace_setevent @TraceID, 12, 10, @On
 EXECUTE sp_trace_setevent @TraceID, 12, 14, @On
 EXECUTE sp_trace_setevent @TraceID, 12, 18, @On
 EXECUTE sp_trace_setevent @TraceID, 12, 11, @On
 EXECUTE sp_trace_setevent @TraceID, 12, 12, @On
 EXECUTE sp_trace_setevent @TraceID, 12, 13, @On

 

(Примечание: Сейчас самое время, чтобы определить любые фильтры трассировки, если мне требуется создать их. Фильтр трассировки позволяет мне отлавливать только события с определенными значениями в столбцах данных, или события, которые исключают определенные события в столбцах данных. Это замечательно, если Вы не хотите видеть обычно выполняемые события, или если Вас интересует только выполнение определенной хранимой процедуры. Я не буду устанавливать какие бы то ни было фильтры в данном примере.)

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

EXECUTE sp_trace_setstatus @TraceID, 1

Я могу проверить, что трассировка запущена правильно с помощью вызова пары системных функций. Чтобы увидеть все трассировки, запущенные в системе, выполните следующее:

SELECT * FROM fn_trace_getinfo(0)

Используя идентификатор только что созданной трассировки (TraceID), я могу видеть, что эта трассировка является второй трассировкой, запущенной на моей системе. Если я хочу посмотреть данные в файле этой трассировки, не открывая физический файл в файловой системе, я могу использовать следующую функцию трассировки, которая возвращает содержание файла в табличном формате:

SELECT * FROM fn_trace_gettable('C:Tracefile.trc',1)

Заключение

Хотя я использую SQL Profiler в 90 процентах случаев мониторинга моих баз данных, иногда мне требуется мониторинг в течение длительного времени, или меня интересуют только определенные моменты времени. В этих случаях неоценимым оказывается написание и выполнение по расписанию моих собственных трассировок.

20/08/2007

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

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

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

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

Контакты

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

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

В избранное