<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dev.net.ua/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Denis Reznik's blog</title><link>http://dev.net.ua/blogs/denisreznik/default.aspx</link><description /><dc:language /><generator>CommunityServer 2.1 (Build: 60809.935)</generator><item><title>UNION, особенности работы</title><link>http://dev.net.ua/blogs/denisreznik/archive/2010/03/15/9493.aspx</link><pubDate>Sun, 14 Mar 2010 22:03:13 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9493</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>0</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9493.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9493</wfw:commentRss><description>&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; В этом посте хочу рассказать об одной приятной особенности механизма работы UNION в SQL Server, позволяющей писать масштабируемые запросы, удовлетворяющие порой довольно сложным требования заказчиков.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Чтобы лучше понять ситуацию, представьте себе такой кусочек системы (американская доска объявлений): таблица штатов - States, таблица городов - Cities (связана со штатом), таблица объявлений - Ads (связана со штатом и с городом) (скрипты создания таблиц и выборки я привожу в материалах поста). Теперь заказчик хочет, чтобы при просмотре объявлений, если выбран город, отображать в списке сначала объявления города, потом объявления других городов этого штата, потом объявления привязанные к штату, но не привязанные к городу, и наконец, объявления не связанные ни со штатом ни с городом. У этого требования было несколько решений, и каждое из которых приходилось в корне менять, т.к. при росте нагрузки оно становилось узким местом системы. И наиболее удачным решением оказалось использование UNION (а точнее UNION ALL). Запрос (выборка объявлений с пейджированием), в этом случае, выглядит примерно так:&lt;/p&gt;  &lt;div&gt;   &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; Id, Title &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;&lt;br /&gt;(&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;TOP&lt;/span&gt;(@&lt;span style="color:#0000ff;"&gt;RowCount&lt;/span&gt;) Id, Title, ROW_NUMBER() &lt;span style="color:#0000ff;"&gt;OVER&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;BY&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; 1)) &lt;span style="color:#0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color:#006080;"&gt;'row_num'&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;&lt;br /&gt;    (&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;TOP&lt;/span&gt;(@&lt;span style="color:#0000ff;"&gt;RowCount&lt;/span&gt;) Id, Title &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; Ads&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt; StateId = @StateId &lt;span style="color:#0000ff;"&gt;AND&lt;/span&gt; CityId = @CityId&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;AND&lt;/span&gt; StateId &lt;span style="color:#0000ff;"&gt;IS&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;NOT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;NULL&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;AND&lt;/span&gt; CityId &lt;span style="color:#0000ff;"&gt;IS&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;NOT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;NULL&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ALL&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;TOP&lt;/span&gt;(@&lt;span style="color:#0000ff;"&gt;RowCount&lt;/span&gt;) Id, Title &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; Ads&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt; StateId = @StateId &lt;span style="color:#0000ff;"&gt;AND&lt;/span&gt; CityId != @CityId&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;AND&lt;/span&gt; StateId &lt;span style="color:#0000ff;"&gt;IS&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;NOT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;NULL&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;AND&lt;/span&gt; CityId &lt;span style="color:#0000ff;"&gt;IS&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;NOT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;NULL&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ALL&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;TOP&lt;/span&gt;(@&lt;span style="color:#0000ff;"&gt;RowCount&lt;/span&gt;) Id, Title &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; Ads&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt; StateId = @StateId &lt;span style="color:#0000ff;"&gt;AND&lt;/span&gt; StateId &lt;span style="color:#0000ff;"&gt;IS&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;NOT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;NULL&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;AND&lt;/span&gt; CityId &lt;span style="color:#0000ff;"&gt;IS&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;NULL&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ALL&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;TOP&lt;/span&gt;(@&lt;span style="color:#0000ff;"&gt;RowCount&lt;/span&gt;) Id, Title &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; Ads&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt; StateId &lt;span style="color:#0000ff;"&gt;IS&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;NULL&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;AND&lt;/span&gt; CityId &lt;span style="color:#0000ff;"&gt;IS&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;NULL&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;BY&lt;/span&gt; Id &lt;span style="color:#0000ff;"&gt;DESC&lt;/span&gt;&lt;br /&gt;    ) s&lt;br /&gt;) s2&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt; s2.row_num &amp;gt; (@&lt;span style="color:#0000ff;"&gt;RowCount&lt;/span&gt; - @ItemsPerPage)&lt;/pre&gt;
&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;&amp;#160;&amp;#160;&amp;#160; (Скрипты создания БД, наполнения БД, запросов и плана выполнения я привожу в материалах поста. БД не является копией продашн БД, скорее неким макетом, в котором присутствуют элементы, позволяющие продемонстрировать функционал)&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Теперь о том, что же, собственно, хорошего в этом решении. Взгляните на фрагмент сгенерированного плана выполнения:&lt;/div&gt;

&lt;div&gt;
  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;a href="http://dev.net.ua/blogs/denisreznik/union_query_1F9EB7B5.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="union_query" border="0" alt="union_query" src="http://dev.net.ua/blogs/denisreznik/union_query_thumb_7DD2DF23.png" width="377" height="237" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Прелесть всего этого в том, что в случае, когда выборка попадает в количество строк, указанное в TOP, то все последующие выборки, указанные в UNION ALL не выполняются. Т.е. они не возвращают данных, которые затем подвергаются какой-то обработке (в данном случае – возову функции ROW_NUMBER). Таким образом получаем довольно неплохой шаблон решения подобного рода задач.&lt;/p&gt;

&lt;p&gt;Материалы поста:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;- &lt;a href="http://cid-7ef2f09b7178758f.skydrive.live.com/browse.aspx/.Public/dev.net.ua?uc=1&amp;amp;isFromRichUpload=1"&gt;UNION, особенности работы&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ссылки по теме:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/ms180026.aspx"&gt;UNION (Transact-SQL)&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/ms175945.aspx"&gt;Правила использования оператора UNION&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/ms191141.aspx"&gt;Объединение результирующих наборов с помощью оператора UNION&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;div class="vcard"&gt;&lt;img style="float:left;margin-right:4px;" class="photo" alt="photo of Денис Резник" src="http://dev.net.ua/photos/denisreznik/images/8764/original.aspx" /&gt;&lt;span class="fn n"&gt;&lt;span class="given-name"&gt;Денис&lt;/span&gt; &lt;span class="given-family"&gt;Резник&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;

  &lt;div class="org"&gt;LPP Soft, .Net Team Lead&lt;/div&gt;

  &lt;div class="vcard"&gt;&lt;a class="email" href="mailto:DenisReznik@live.ru"&gt;DenisReznik@live.ru&lt;/a&gt;&lt;/div&gt;

  &lt;div class="adr"&gt;&lt;span class="locality"&gt;Харьков&lt;/span&gt;, &lt;span class="country-name"&gt;Украина&lt;/span&gt;&lt;/div&gt;

  &lt;div class="vcard"&gt;&lt;a class="url" href="http://dev.net.ua/blogs/denisreznik/"&gt;http://dev.net.ua/blogs/denisreznik/&lt;/a&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9493" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Performance+Tuning/default.aspx">Performance Tuning</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Tips_2600_amp_3B00_Tricks/default.aspx">Tips&amp;amp;Tricks</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/TOP/default.aspx">TOP</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/UNION+ALL/default.aspx">UNION ALL</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/UNION/default.aspx">UNION</category></item><item><title>Материалы доклада &quot;Защита данных в SQL Server: Transparent Data Encryption&quot;</title><link>http://dev.net.ua/blogs/denisreznik/archive/2010/03/10/9464.aspx</link><pubDate>Tue, 09 Mar 2010 22:19:00 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9464</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>1</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9464.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9464</wfw:commentRss><description>&lt;p&gt;        5 марта состоялась первая весенняя &lt;a href="http://dev.net.ua/blogs/polhovskiy/archive/2010/02/27/9401.aspx" target="_blank"&gt;встреча UNETA&lt;/a&gt;, на которой я выступал с докладом на тему "Защита данных в SQL Server 2008: Transparent Data Encryption". Доклад был посвящён защите носителей информации при помощи    &lt;br /&gt;прозрачного шифрования данных. Рассматривались проблемы, решаемые TDE, область применения и механизм работы. В скором времени собираюсь подготовить и выложить веб-каст по теме. А сейчас выкладываю материалы доклада: &lt;a href="http://cid-7ef2f09b7178758f.skydrive.live.com/self.aspx/.Public/Uneta/Transparent%20Data%20Encryption/Transparent%20Data%20Encryption.pptx" target="_blank"&gt;презентацию&lt;/a&gt; и &lt;a href="http://cid-7ef2f09b7178758f.skydrive.live.com/self.aspx/.Public/Uneta/Transparent%20Data%20Encryption/TDE.zip" target="_blank"&gt;скрипты&lt;/a&gt;, использовавшиеся в демонстрации. И пару фотографий со встречи ;)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dev.net.ua/blogs/denisreznik/DSC_0747_5AB51371.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="DSC_0747" border="0" alt="DSC_0747" src="http://dev.net.ua/blogs/denisreznik/DSC_0747_thumb_6A74A875.jpg" width="541" height="358" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dev.net.ua/blogs/denisreznik/DSC_0751_21DAB9A4.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="DSC_0751" border="0" alt="DSC_0751" src="http://dev.net.ua/blogs/denisreznik/DSC_0751_thumb_2029EDD0.jpg" width="544" height="368" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Материалы доклада:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;- &lt;a href="http://dev.net.ua/files/folders/unetameetings/entry9466.aspx"&gt;dev.net.ua&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://cid-7ef2f09b7178758f.skydrive.live.com/browse.aspx/.Public/Uneta/Transparent%20Data%20Encryption"&gt;SkyDrive&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Ссылки по теме:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/bb934049.aspx"&gt;Основные сведения о TDE&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/cc278098(en-us).aspx"&gt;Database Encryption in SQL Server 2008 Enterprise Edition&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/bb510589.aspx"&gt;Обеспечение безопасности в SQL Server&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://technet.microsoft.com/ru-ru/library/ms189586.aspx"&gt;Иерархия средств шифрования&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://www.gotdotnet.ru/blogs/yliberman/6085/"&gt;SQL Server 2008 TDE (Ян Либерман)&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://www.gotdotnet.ru/blogs/yliberman/6089/"&gt;Прогнозирование "тормозов" от включения TDE (Ян Либерман)&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://www.gotdotnet.ru/blogs/yliberman/6091/"&gt;TDE в разрезе (Ян Либерман)&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;div class="vcard"&gt;&lt;img style="float:left;margin-right:4px;" class="photo" alt="photo of Денис Резник" src="http://dev.net.ua/photos/denisreznik/images/8764/original.aspx" /&gt;&lt;span class="fn n"&gt;&lt;span class="given-name"&gt;Денис&lt;/span&gt; &lt;span class="given-family"&gt;Резник&lt;/span&gt; &lt;/span&gt;      &lt;div class="org"&gt;LPPSoft&lt;/div&gt;      &lt;div&gt;&lt;a class="email" href="mailto:DenisReznik@live.ru"&gt;DenisReznik@live.ru&lt;/a&gt;&lt;/div&gt;      &lt;div class="adr"&gt;&lt;span class="locality"&gt;Харьков&lt;/span&gt;, &lt;span class="country-name"&gt;Украина&lt;/span&gt;&lt;/div&gt;      &lt;div&gt;&lt;a class="url" href="http://dev.net.ua/blogs/denisreznik/"&gt;http://dev.net.ua/blogs/denisreznik/&lt;/a&gt;&lt;/div&gt;   &lt;/div&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9464" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/UNETA/default.aspx">UNETA</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_25041D04230420042D04_/default.aspx">ХНУРЭ</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_2504300440044C043A043E043204_/default.aspx">Харьков</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Transparent+Data+Encryption/default.aspx">Transparent Data Encryption</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_1F0440043E0437044004300447043D043E043504_+_48043804440440043E04320430043D0438043504_+_340430043D043D044B044504_/default.aspx">Прозрачное шифрование данных</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/TDE/default.aspx">TDE</category></item><item><title>Какая класная штука MDW</title><link>http://dev.net.ua/blogs/denisreznik/archive/2010/02/15/9366.aspx</link><pubDate>Mon, 15 Feb 2010 21:27:55 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9366</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>0</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9366.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9366</wfw:commentRss><description>&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;Какая классная штука &lt;a href="http://msdn.microsoft.com/ru-ru/library/bb677306.aspx" target="_blank"&gt;Management Data Warehouse&lt;/a&gt;&amp;quot; – в который раз подумал я, собираясь идти домой в пятницу… &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Теперь немного предыстории. В пятницу вечером, сразу после встречи UNETA пришлось ехать в офис, т.к. заказчик обрывал трубку и &amp;quot;просил&amp;quot; сделать, чтобы сайт не тормозил. Делать нечего, тем более, что лучше сразу, чем потом на выходных. Еду в офис и первым делом открываю сайт. Таки да, тормозит. На сервере БД такая картина: проц стабильно загружен на 100%, собственно поэтому сайт так медленно работает. Activity Monitor не запускается, профайлером ловить долго. И, в который раз, я порадовался, что в своё время уговорил заказчика, что нам нужно настроить на сервере MDW. В течении 2-х минут я определил виновника. Им оказался запрос на подсчёт данных (этим же днём по требованию заказчика был изменён алгоритм, но при небольшой нагрузке его работы не было заметно, зато при росте нагрузки на сервер, простой COUNT скушал все ресурсы). Ещё в течении 20 мин оптимизировал запрос.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;Всё таки класная штука Management Data Warehouse&amp;quot; - в который раз подумал я, собираясь идти домой. Впереди были спокойные выходные…&lt;a href="http://dev.net.ua/blogs/denisreznik/query_statistics_210BB280.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="query_statistics" border="0" alt="query_statistics" align="right" src="http://dev.net.ua/blogs/denisreznik/query_statistics_thumb_3F09C074.jpg" width="431" height="322" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ссылки по теме:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/bb677179.aspx"&gt;Data Collection&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/bb677306.aspx"&gt;Management Data Warehouse&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://dev.net.ua/blogs/denisreznik/archive/2008/08/04/6591.aspx"&gt;Обзор Performance Studio&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;&lt;img style="float:left;margin-right:4px;" class="photo" alt="photo of Денис Резник" src="http://dev.net.ua/photos/denisreznik/images/8764/original.aspx" width="299" height="59" /&gt;&lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;div class="vcard"&gt;&lt;span class="fn n"&gt;&lt;span class="given-name"&gt;Денис&lt;/span&gt; &lt;span class="given-family"&gt;Резник&lt;/span&gt; &lt;/span&gt;      &lt;div class="org"&gt;LPP Soft, .Net Team Lead&lt;/div&gt;      &lt;div&gt;&lt;a class="email" href="mailto:DenisReznik@live.ru"&gt;DenisReznik@live.ru&lt;/a&gt;&lt;/div&gt;      &lt;div class="adr"&gt;&lt;span class="locality"&gt;Харьков&lt;/span&gt;, &lt;span class="country-name"&gt;Украина&lt;/span&gt;&lt;/div&gt;      &lt;div&gt;&lt;a class="url" href="http://dev.net.ua/blogs/denisreznik/"&gt;http://dev.net.ua/blogs/denisreznik/&lt;/a&gt;&lt;/div&gt;   &lt;/div&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9366" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Management+Data+Warehouse/default.aspx">Management Data Warehouse</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Data+Collector/default.aspx">Data Collector</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Performance+Tuning/default.aspx">Performance Tuning</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/MDW/default.aspx">MDW</category></item><item><title>Материалы доклада &quot;Выбор стратегии резервного копирования БД&quot;</title><link>http://dev.net.ua/blogs/denisreznik/archive/2010/02/13/9359.aspx</link><pubDate>Sat, 13 Feb 2010 16:13:31 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9359</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>0</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9359.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9359</wfw:commentRss><description>&lt;p class="zemanta-img"&gt;&lt;/p&gt;  &lt;p class="zemanta-img-attribution"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Вчера состоялась очередная встреча профессиональной группы .Net разработчиков UNETA, на которой я выступал с докладом на тему &amp;quot;Выбор стратегии резервного копирования БД в SQL Server 2008&amp;quot;.&amp;#160; В докладе рассматривались варианты резервного копирования данных, доступные в SQL Server 2008, механизмы резервного копирования данных и лога транзакций и те принципы, на основе которых строится выбор стратегии Резервного копирования\Восстановления базы данных. &lt;/p&gt;  &lt;p class="zemanta-img-attribution"&gt;Презентацию можно скачать с &lt;a href="http://dev.net.ua/files/folders/unetameetings/entry9354.aspx" target="_blank"&gt;dev.net.ua&lt;/a&gt; или с моего &lt;a href="http://cid-7ef2f09b7178758f.skydrive.live.com/self.aspx/.Public/Uneta/Backup%20and%20Recovery.pptx" target="_blank"&gt;SkyDrive&lt;/a&gt;.&lt;/p&gt;  &lt;p class="zemanta-img-attribution"&gt;Если есть вопросы по теме доклада, пишите мне на &lt;a href="mailto:DenisReznik@live.ru"&gt;DenisReznik@live.ru&lt;/a&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p class="zemanta-img-attribution"&gt;&lt;a href="http://dev.net.ua/blogs/denisreznik/question_4F3C5CFD.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="question" border="0" alt="question" src="http://dev.net.ua/blogs/denisreznik/question_thumb_2D70846C.jpg" width="440" height="331" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Материалы доклада:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div class="zemanta-pixie"&gt;- &lt;a href="http://dev.net.ua/files/folders/unetameetings/entry9354.aspx"&gt;dev.net.ua&lt;/a&gt;&lt;/div&gt;    &lt;div class="zemanta-pixie"&gt;- &lt;a href="http://cid-7ef2f09b7178758f.skydrive.live.com/self.aspx/.Public/Uneta/Backup%20and%20Recovery.pptx"&gt;SkyDrive&lt;/a&gt;&lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Ссылки по теме:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;- &lt;a href="http://technet.microsoft.com/ru-ru/library/ms191239.aspx"&gt;Введение в стратегию резервного копирования и восстановления в SQL Server&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://technet.microsoft.com/ru-ru/library/ms190217.aspx"&gt;Резервное копирование в модели полного восстановления&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://technet.microsoft.com/ru-ru/library/ms190692.aspx"&gt;Резервное копирование с использованием модели восстановления с неполным протоколированием&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://technet.microsoft.com/ru-ru/library/ms191164.aspx"&gt;Резервное копирование при простой модели восстановления&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://technet.microsoft.com/ru-ru/library/ms175199.aspx"&gt;Реализация сценариев восстановления&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://technet.microsoft.com/ru-ru/library/ms190954.aspx"&gt;Рекомендации по оптимизации производительности резервного копирования&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;div class="vcard"&gt;&lt;img style="float:left;margin-right:4px;" class="photo" alt="photo of Денис Резник" src="http://dev.net.ua/photos/denisreznik/images/8764/original.aspx" /&gt;&lt;span class="fn n"&gt;&lt;span class="given-name"&gt;Денис&lt;/span&gt; &lt;span class="given-family"&gt;Резник&lt;/span&gt; &lt;/span&gt;      &lt;div class="org"&gt;LPP Soft, .Net Team Lead&lt;/div&gt;      &lt;div&gt;&lt;a class="email" href="mailto:DenisReznik@live.ru"&gt;DenisReznik@live.ru&lt;/a&gt;&lt;/div&gt;      &lt;div class="adr"&gt;&lt;span class="locality"&gt;Харьков&lt;/span&gt;, &lt;span class="country-name"&gt;Украина&lt;/span&gt;&lt;/div&gt;      &lt;div&gt;&lt;a class="url" href="http://dev.net.ua/blogs/denisreznik/"&gt;http://dev.net.ua/blogs/denisreznik/&lt;/a&gt;&lt;/div&gt;   &lt;/div&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9359" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/UNETA/default.aspx">UNETA</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_25041D04230420042D04_/default.aspx">ХНУРЭ</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_2504300440044C043A043E043204_/default.aspx">Харьков</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_1B043E043304_+_4204400430043D04370430043A04460438043904_/default.aspx">Лог транзакций</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Restore/default.aspx">Restore</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Transaction+log/default.aspx">Transaction log</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_2004350437043504400432043D043E043504_+_3A043E043F04380440043E04320430043D0438043504_/default.aspx">Резервное копирование</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Backup/default.aspx">Backup</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_1C043E04340435043B044C04_+_32043E0441044104420430043D043E0432043B0435043D0438044F04_/default.aspx">Модель восстановления</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Recovery+model/default.aspx">Recovery model</category></item><item><title>Временные таблицы, табличные переменные и tempdb</title><link>http://dev.net.ua/blogs/denisreznik/archive/2010/01/31/9315.aspx</link><pubDate>Sun, 31 Jan 2010 21:33:31 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9315</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>3</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9315.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9315</wfw:commentRss><description>&lt;div class="zemanta-img"&gt;   &lt;p class="zemanta-img-attribution"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Довольно часто приходится слышать то, что различие между &lt;a href="http://msdn.microsoft.com/ru-ru/library/ms175010.aspx" target="_blank"&gt;табличными переменными&lt;/a&gt; и &lt;a href="http://www.sqlteam.com/article/temporary-tables" target="_blank"&gt;временными таблицами&lt;/a&gt; заключается в том, что первые всегда хранятся в памяти, а последние в tempdb. Но на самом деле это миф. И временные таблицы, и табличные переменные, создаются в tempdb (так как обязательно должно быть постоянное хранилище данных, на случай, если памяти всё же не хватит).&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Убедиться в том, что табличные переменные создаются в tempdb так же, как и временные таблицы, можно проделав вот такой опыт:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div id="codeSnippetWrapper"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:41.23%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;height:80px;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;COUNT&lt;/span&gt;(*) &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; tempdb.sys.tables;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;DECLARE&lt;/span&gt; @table_var &lt;span style="color:#0000ff;"&gt;table&lt;/span&gt;(id &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;);&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;COUNT&lt;/span&gt;(*) &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; tempdb.sys.tables;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;GO&lt;/span&gt;&lt;/pre&gt;

    &lt;br /&gt;&lt;/div&gt;
&lt;/blockquote&gt;

&lt;div&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Результат выполнения 2-го &lt;font size="2"&gt;&lt;font color="#ff00ff"&gt;COUNT&lt;/font&gt;&lt;font color="#808080"&gt;(*) &lt;/font&gt;&lt;font color="#000000"&gt;будет на 1 больше чем первого. Следовательно, в результате объявления табличной переменной в tempdb создалась таблица, и в способе хранения данных они не особо отличаются. Давайте теперь посмотрим на отличия табличных переменных от временных таблиц:&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;&lt;font size="2"&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; Преимущества:&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;font size="2"&gt;Автоматически очищаются в конце функции, хранимой процедуры или пакета, где они были определены&lt;/font&gt; &lt;/li&gt;

  &lt;li&gt;При использовании в хранимых процедурах табличных переменных приходится прибегать к рекомпиляциям реже, чем при использовании временных таблиц &lt;/li&gt;

  &lt;li&gt;Транзакции с использованием табличных переменных продолжаются только во время процесса обновления соответствующих табличных переменных. Поэтому табличные переменные реже подвергаются блокировке и требуют меньших ресурсов для ведения журналов регистрации &lt;/li&gt;

  &lt;li&gt;Табличной переменной можно присвоить результат выполнения табличной функции, для повторного использования результатов &lt;/li&gt;

  &lt;li&gt;Табличную переменную можно передавать как параметр в хранимую процедуру (SQL Server 2008) &lt;/li&gt;
&lt;/ul&gt;

&lt;div&gt;&lt;font size="2"&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; Недостатки:&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;На табличных переменных нельзя создавать некластерные индексы &lt;/li&gt;

  &lt;li&gt;Табличные переменные не содержат статистику &lt;/li&gt;

  &lt;li&gt;Табличные переменные не могут использоваться в INSERT EXEC или SELECT INTO &lt;/li&gt;

  &lt;li&gt;Запросы, изменяющие табличные переменные, не создают параллельных планов выполнения запроса &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Общие &lt;a href="http://support.microsoft.com/default.aspx/kb/305977" target="_blank"&gt;рекомендации Microsoft&lt;/a&gt;, относительно использования табличных переменных таковы: &amp;quot;Используйте их везде, где это возможно, кроме тех случаев, когда у вас хранятся значительные объёмы данных, и присутствует повторное использование таблиц&amp;quot;. Кроме того, отмечено, что сценарии использования могут быть разными, и в каждом конкретном случае нужно смотреть и пробовать что вам больше подходит.&lt;/p&gt;

&lt;p&gt;Ссылки по теме:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/ms175010.aspx"&gt;Табличные переменные (MSDN)&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;- &lt;a href="http://www.sqlteam.com/article/temporary-tables"&gt;Временные таблицы&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;- &lt;a href="http://support.microsoft.com/default.aspx/kb/305977"&gt;FAQ по использованию табличных переменных&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;- &lt;a href="http://www.sqlskills.com/blogs/Kimberly/post/Understanding-TempDB-table-variables-v-temp-tables-and-Improving-throughput-for-TempDB.aspx"&gt;Блог Kimberly Tripp&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;- &lt;a href="http://www.sqlservercentral.com/blogs/cybersql/archive/2009/12/15/yes-table-variables-and-temp-tables-both-use-the-tempdb.aspx"&gt;Блог Ken Simmons&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;- &lt;a href="http://blog.sqlauthority.com/2009/12/15/sql-server-difference-temptable-and-table-variable-temptable-in-memory-a-myth/"&gt;Блог Pinal Dave&lt;/a&gt;&lt;/p&gt;

  &lt;div class="vcard"&gt;&lt;img style="float:left;margin-right:4px;" class="photo" alt="photo of Денис Резник" src="http://dev.net.ua/photos/denisreznik/images/8764/original.aspx" /&gt;&lt;span class="fn n"&gt;&lt;span class="given-name"&gt;Денис&lt;/span&gt; &lt;span class="given-family"&gt;Резник&lt;/span&gt; &lt;/span&gt;

    &lt;div class="org"&gt;LPP Soft, .Net Team Lead&lt;/div&gt;

    &lt;div&gt;&lt;a class="email" href="mailto:DenisReznik@live.ru"&gt;DenisReznik@live.ru&lt;/a&gt;&lt;/div&gt;

    &lt;div class="adr"&gt;&lt;span class="locality"&gt;Харьков&lt;/span&gt;, &lt;span class="country-name"&gt;Украина&lt;/span&gt;&lt;/div&gt;

    &lt;div&gt;&lt;a class="url" href="http://dev.net.ua/blogs/denisreznik/"&gt;http://dev.net.ua/blogs/denisreznik/&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9315" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_1C0438044404_/default.aspx">Миф</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Table+Variables/default.aspx">Table Variables</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_2204300431043B04380447043D044B043504_+_3F043504400435043C0435043D043D044B043504_/default.aspx">Табличные переменные</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Temp+Tables/default.aspx">Temp Tables</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_1204400435043C0435043D043D044B043504_+_4204300431043B04380446044B04_/default.aspx">Временные таблицы</category></item><item><title>Материалы доклада &quot;Resource Governor: управление ресурсами в SQL Server 2008&quot;</title><link>http://dev.net.ua/blogs/denisreznik/archive/2010/01/30/9305.aspx</link><pubDate>Sat, 30 Jan 2010 12:32:36 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9305</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>0</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9305.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9305</wfw:commentRss><description>&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 29 января состоялась &lt;a href="http://dev.net.ua/blogs/katerinadrobotko/archive/2010/01/26/9276.aspx"&gt;встреча UNETA&lt;/a&gt;, которая проходила в новом формате. На встрече я выступал с докладом на тему “Resource Governor: управление ресурсами в SQL Server 2008”. В докладе был представлен обзор компонента Resource Governor. Рассматривались его возможности, механизм управления ресурсами, основные сценарии использования. Материалы доклада находятся здесь - &lt;a href="http://x2u.ms/11mm" target="_blank"&gt;http://x2u.ms/11mm&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Материалы доклада:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;- &lt;a href="http://dev.net.ua/files/folders/unetameetings/entry9303.aspx" target="_blank"&gt;dev.net.ua&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;- &lt;a href="http://cid-7ef2f09b7178758f.skydrive.live.com/self.aspx/.Public/Uneta/Resource%20Governor.zip" target="_blank"&gt;SkyDrive&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Ссылки по теме:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/bb933866.aspx"&gt;Управление рабочей нагрузкой и ресурсами SQL Server&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/bb933944.aspx"&gt;Сценарии управления рабочей нагрузкой регулятора ресурсов&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://www.gotdotnet.ru/blogs/denish/1957/"&gt;Resource Governor Часть 1 (Блог Николая Денищенко)&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://www.gotdotnet.ru/blogs/denish/1958/"&gt;Resource Governor Часть 2 (Блог Николая Денищенко)&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://www.gotdotnet.ru/blogs/denish/1959/"&gt;Resource Governor Часть 3 (Блог Николая Денищенко)&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;div class="vcard"&gt;&lt;img style="float:left;margin-right:4px;" class="photo" alt="photo of Денис Резник" src="http://dev.net.ua/photos/denisreznik/images/8764/original.aspx" /&gt;&lt;span class="fn n"&gt;&lt;span class="given-name"&gt;Денис&lt;/span&gt; &lt;span class="given-family"&gt;Резник&lt;/span&gt; &lt;/span&gt;      &lt;div class="org"&gt;LPP Soft, .Net Team Lead&lt;/div&gt;      &lt;div&gt;&lt;a class="email" href="mailto:DenisReznik@live.ru"&gt;DenisReznik@live.ru&lt;/a&gt;&lt;/div&gt;      &lt;div class="adr"&gt;&lt;span class="locality"&gt;Харьков&lt;/span&gt;, &lt;span class="country-name"&gt;Украина&lt;/span&gt;&lt;/div&gt;      &lt;div&gt;&lt;a class="url" href="http://dev.net.ua/blogs/denisreznik/"&gt;http://dev.net.ua/blogs/denisreznik/&lt;/a&gt;&lt;/div&gt;   &lt;/div&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9305" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Classification/default.aspx">Classification</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Workload+Group/default.aspx">Workload Group</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_23043F044004300432043B0435043D0438043504_+_40043504410443044004410430043C043804_/default.aspx">Управление ресурсами</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Resource+Pool/default.aspx">Resource Pool</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Resource+Governor/default.aspx">Resource Governor</category></item><item><title>Бесплатные Веб-семинары по SQL Server</title><link>http://dev.net.ua/blogs/denisreznik/archive/2010/01/24/9273.aspx</link><pubDate>Sun, 24 Jan 2010 15:44:57 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9273</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>0</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9273.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9273</wfw:commentRss><description>&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Brent Ozar в &lt;a href="http://www.brentozar.com/archive/2010/01/upcoming-free-training-events/" target="_blank"&gt;своём блоге&lt;/a&gt; анонсировал несколько интересных мероприятий:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1) 28 января – 1-часовой вебкаст, на тему &amp;quot;But It Worked On My Machine!&amp;quot;. Будут рассмотрены вопросы поиска плохого кода и выявления распространённых ошибок.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://www.quest.com/events/listdetails.aspx?contentid=10848&amp;amp;technology=34&amp;amp;prod=&amp;amp;prodfamily=&amp;amp;loc=" target="_blank"&gt;Регистрация&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2) 3 марта – 1-дневный семинар, посвящённый вопросам поиска неполадок и проблем с производительностью при помощи &lt;a href="http://msdn.microsoft.com/ru-ru/library/ms188754.aspx" target="_blank"&gt;Dynamic Management Views&lt;/a&gt;. Доклады будут 3-х уровней – от начального, до продвинутого.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://www.vconferenceonline.com/shows/spring10/quest/register/multireg.asp" target="_blank"&gt;Регистрация&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Более подробно, о мероприятиях, можно прочесть в блоге &lt;a href="http://www.brentozar.com/archive/2010/01/upcoming-free-training-events/" target="_blank"&gt;Brent Ozar&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Ссылки по теме:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;- &lt;a href="http://www.brentozar.com/archive/2010/01/upcoming-free-training-events/"&gt;Блог Brent Ozar&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://www.quest.com/events/listdetails.aspx?contentid=10848&amp;amp;technology=34&amp;amp;prod=&amp;amp;prodfamily=&amp;amp;loc="&gt;Регистрация на веб-каст, на тему &amp;quot;But It Worked On My Machine!&amp;quot;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://www.vconferenceonline.com/shows/spring10/quest/register/multireg.asp"&gt;Регистрация на семинар по Dynamic Management Views&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/ms188754.aspx" target="_blank"&gt;Dynamic Management Views&lt;/a&gt;&lt;/p&gt;   &lt;img style="float:left;margin-right:4px;" class="photo" alt="photo of Денис Резник" src="http://dev.net.ua/photos/denisreznik/images/8764/original.aspx" /&gt;&lt;span class="fn n"&gt;&lt;span class="given-name"&gt;Денис&lt;/span&gt; &lt;span class="given-family"&gt;Резник&lt;/span&gt; &lt;/span&gt;    &lt;div class="org"&gt;LPP Soft, .Net Team Lead&lt;/div&gt;    &lt;div&gt;&lt;a class="email" href="mailto:DenisReznik@live.ru"&gt;DenisReznik@live.ru&lt;/a&gt;&lt;/div&gt;    &lt;div class="adr"&gt;&lt;span class="locality"&gt;Харьков&lt;/span&gt;, &lt;span class="country-name"&gt;Украина&lt;/span&gt;&lt;/div&gt;    &lt;div&gt;&lt;a class="url" href="http://dev.net.ua/blogs/denisreznik/"&gt;http://dev.net.ua/blogs/denisreznik/&lt;/a&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9273" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/DMV_2700_s/default.aspx">DMV's</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Webcast/default.aspx">Webcast</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_1204350431043A04300441044204_/default.aspx">Вебкаст</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Dynamic+Management+Views/default.aspx">Dynamic Management Views</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Virtual+Event/default.aspx">Virtual Event</category></item><item><title>Насколько случайным бывает Random</title><link>http://dev.net.ua/blogs/denisreznik/archive/2010/01/23/9271.aspx</link><pubDate>Sat, 23 Jan 2010 13:52:32 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9271</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>2</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9271.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9271</wfw:commentRss><description>&lt;div class="mycode"&gt;   &lt;div class="vcard"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Недавно один из членов моей комманды задал мне вопрос: &amp;quot;Почему генерация случайных чисел в .Net упорно выдаёт не рэндомные значения, а повторяющиеся?&amp;quot;. И последовательный вызов вот такого метода, всегда генерирует одну и ту же последовательность чисел:&lt;/div&gt;    &lt;div class="vcard"&gt;&amp;#160;&lt;/div&gt;    &lt;div id="codeSnippetWrapper"&gt;     &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;       &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;const&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; AllowableCharacters = &lt;span style="color:#006080;"&gt;&amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&amp;quot;&lt;/span&gt;;&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;         &lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; GenerateRandomString(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; length)&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; randomString = String.Empty;&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;     Random random = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Random();&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; length; i++)&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;         randomString += AllowableCharacters[random.Next(AllowableCharacters.Length)];&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; randomString;&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="vcard"&gt;&amp;#160;&lt;/div&gt;

  &lt;div class="vcard"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Случай меня заинтересовал, и я полез в рефлектор чтобы понять причину такого поведения. Вот, что я там увидел:&lt;/div&gt;

  &lt;div class="vcard"&gt;&amp;#160;&lt;/div&gt;

  &lt;div id="codeSnippetWrapper"&gt;
    &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Random() : &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;(Environment.TickCount) {}&lt;/pre&gt;
&lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="vcard"&gt;&amp;#160;&lt;/div&gt;

  &lt;div class="vcard"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Наверное ни для кого не секрет, что генерация случайных чисел в .Net (и не только в .Net) базируется на использовании некоего начального значения, которое должно быть уникальным. Для получений таких значений часто используется уникальная, в данном контексте, метка времени. Как видно из кода, конструктор по умолчанию, в качестве такого, значения использует &lt;a href="http://msdn.microsoft.com/ru-ru/library/system.environment.tickcount.aspx" target="_blank"&gt;Environment.TickCount&lt;/a&gt;&amp;#160; - время, прошедшее со старта приложения, в миллисекундах. Т.е. получается, что если ваши объекты Random создаются с интервалом меньше миллиcекунды, при помощи конструктора по умолчанию – они будут инициализированы одним и тем же параметром, что в свою очередь влечёт генерацию одинаковых последовательностей &amp;quot;случайных&amp;quot; чисел.&lt;/div&gt;

  &lt;p class="vcard"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; На форумах можно встретить несколько вариантов решения проблемы, таких как передачу в конструктор более мелкого промежутка времени (например &lt;a href="http://msdn.microsoft.com/ru-ru/library/system.datetime.ticks.aspx" target="_blank"&gt;DateTime.Now.Ticks&lt;/a&gt;), задержка между вызовами методов при помощи &lt;a href="http://msdn.microsoft.com/ru-ru/library/d00bd51t.aspx" target="_blank"&gt;Thread.Sleep&lt;/a&gt;. Но исходя из всего вышесказанного, наилучшим варантом, гарантирующим генерацию случайных чисел, является использование одного экземпляра класса Random:&lt;/p&gt;

  &lt;div id="codeSnippetWrapper"&gt;
    &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; GenerateRealRandomString(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; length, Random random)&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; randomString = String.Empty;&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; length; i++)&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;         randomString += AllowableCharacters[random.Next(AllowableCharacters.Length)];&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; randomString;&lt;/pre&gt;
&lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="vcard"&gt;&amp;#160;&lt;/div&gt;

  &lt;div class="vcard"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Где вызов метода, осуществляется таким образом:&lt;/div&gt;

  &lt;div class="vcard"&gt;&amp;#160;&lt;/div&gt;

  &lt;div id="codeSnippetWrapper"&gt;
    &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; Random random = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Random();&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; Console.WriteLine(GenerateRealRandomString(10, random));&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; Console.WriteLine(GenerateRealRandomString(10, random));&lt;/pre&gt;
&lt;/div&gt;
  &lt;/div&gt;

  &lt;p class="vcard"&gt;&amp;#160;&lt;/p&gt;

  &lt;p class="vcard"&gt;Материалы поста:&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p class="vcard"&gt;- &lt;a href="http://xtourl.com/324b" target="_blank"&gt;Насколько случайным бывает Random&lt;/a&gt;&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p class="vcard"&gt;Ссылки по теме:&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;div class="vcard"&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/system.random.aspx"&gt;Класс Random&lt;/a&gt;&lt;/div&gt;

    &lt;div class="vcard"&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/system.environment.tickcount.aspx"&gt;Environment.TickCount&lt;/a&gt;&lt;/div&gt;

    &lt;div class="vcard"&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/system.datetime.ticks.aspx"&gt;DateTime.Now.Ticks&lt;/a&gt;&lt;/div&gt;

    &lt;div class="vcard"&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/d00bd51t.aspx"&gt;Thread.Sleep&lt;/a&gt;&amp;#160;&lt;/div&gt;
  &lt;/blockquote&gt;

  &lt;div class="vcard"&gt;&lt;img style="float:left;margin-right:4px;" class="photo" alt="photo of Denis Reznik" src="http://dev.net.ua/photos/denisreznik/images/8764/original.aspx" /&gt;&lt;span class="fn n"&gt;&lt;span class="given-name"&gt;Denis&lt;/span&gt; &lt;span class="given-family"&gt;Reznik&lt;/span&gt; &lt;/span&gt;

    &lt;div class="org"&gt;LPP Soft, .Net Team Lead&lt;/div&gt;

    &lt;div&gt;&lt;a class="email" href="mailto:DenisReznik@live.ru"&gt;DenisReznik@live.ru&lt;/a&gt;&lt;/div&gt;

    &lt;div class="adr"&gt;&lt;span class="locality"&gt;Kharkov&lt;/span&gt;, &lt;span class="country-name"&gt;Ukraine&lt;/span&gt;&lt;/div&gt;

    &lt;div&gt;&lt;a class="url" href="http://dev.net.ua/blogs/denisreznik/"&gt;http://dev.net.ua/blogs/denisreznik/&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9271" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_130435043D04350440043004460438044F04_+_41043B0443044704300439043D044B044504_+_47043804410435043B04_/default.aspx">Генерация случайных чисел</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Random/default.aspx">Random</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/.Net/default.aspx">.Net</category></item><item><title>SQL Server 2008 R2 – Дата выхода</title><link>http://dev.net.ua/blogs/denisreznik/archive/2010/01/19/9252.aspx</link><pubDate>Tue, 19 Jan 2010 21:41:27 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9252</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>0</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9252.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9252</wfw:commentRss><description>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Совсем недавно на сайте &lt;a href="http://blogs.technet.com/dataplatforminsider/default.aspx" target="_blank"&gt;Data Platform Insider&lt;/a&gt; анонсировали &lt;a href="http://blogs.technet.com/dataplatforminsider/archive/2010/01/19/sql-server-2008-r2-gets-an-official-date.aspx" target="_blank"&gt;дату выхода следующей версии SQL Server&lt;/a&gt;. Релиз SQL Server 2008 R2 состоится &lt;strong&gt;10 мая 2010&lt;/strong&gt; &lt;strong&gt;года&lt;/strong&gt;.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Хочу вкратце напомнить ключевые возможности новой версии:&lt;/p&gt; &lt;p&gt;- &lt;a href="http://dev.net.ua/blogs/kosinsky/archive/2009/11/05/9004.aspx" target="_blank"&gt;Две новые редакции SQL Server&lt;/a&gt; (в том числе и бывший codename “Madison” - &lt;a href="http://msdn.microsoft.com/en-us/library/ee730351.aspx" target="_blank"&gt;Parallel Data Warehouse&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/library/cc645579(SQL.105).aspx" target="_blank"&gt;Multi-Server Administration and Data-Tier Application&lt;/a&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/library/ee210682(SQL.105).aspx" target="_blank"&gt;PowerPivot for SharePoint&lt;/a&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/library/ee633763(SQL.105).aspx" target="_blank"&gt;Master Data Services&lt;/a&gt; &lt;p&gt;- &lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/R2-complex-event.aspx"&gt;StreamInsight&lt;/a&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/library/ee240835(SQL.105).aspx" target="_blank"&gt;Улучшение сжатия Unicode данных&lt;/a&gt; &lt;p&gt;- &lt;a href="http://dev.net.ua/blogs/denisreznik/archive/2009/11/22/9044.aspx" target="_blank"&gt;Работа с SQL Azure Database из SSMS&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Об этих и других изменениях в SQL Server вы можете прочесть в&amp;nbsp; &lt;a href="http://msdn.microsoft.com/en-us/library/ee240835(SQL.105).aspx" target="_blank"&gt;разделе MSDN, посвященному SQL Server 2008 R2&lt;/a&gt;, который уже переводится на русский язык. &lt;p&gt;Ссылки по теме: &lt;blockquote&gt; &lt;p&gt;- &lt;a href="http://blogs.technet.com/dataplatforminsider/archive/2010/01/19/sql-server-2008-r2-gets-an-official-date.aspx"&gt;Анонс выхода SQL Server 2008 R2&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/library/bb500435(SQL.105).aspx"&gt;Изменения в SQL Server 2008 R2&lt;/a&gt; &lt;p&gt;- &lt;a href="http://dev.net.ua/blogs/denisreznik/archive/2009/11/22/9044.aspx" target="_blank"&gt;Работа с SQL Azure Database из SSMS&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9252" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_10043D043E043D044104_/default.aspx">Анонс</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Release+Date/default.aspx">Release Date</category></item><item><title>Режим бога в Windows 7</title><link>http://dev.net.ua/blogs/denisreznik/archive/2010/01/13/9208.aspx</link><pubDate>Wed, 13 Jan 2010 21:50:25 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9208</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>3</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9208.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9208</wfw:commentRss><description>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Наверняка это уже не новость, и поисковики пестрят кучей заметок на эту тему, но всё же что это? Да ещё и с таким интригующим названием :) Вот цитата из новостной леты:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;“&lt;b&gt;На прошлой неделе Инна Фрид (Ina Fried) из CNET News.com заявила в сети об обнаружении в Windows 7 скрытой возможности, которая получила название “режима бога” или GodMode. И хотя в действительности никаких божественных привилегий эта возможность не дает, ее использование может понравиться некоторым пользователям.&lt;/b&gt;”&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Чтобы включить “режим бога” нужно создать на рабочем столе новую папку и назвать её “GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}”. В результате чего значок папки изменится, и по двойному клику откроется окно, содержащее все элементы панели управления нижнего уровня в одном месте:&lt;/p&gt; &lt;p&gt;&lt;a href="http://dev.net.ua/blogs/denisreznik/GodMode_5AA571E2.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="GodMode" border="0" alt="GodMode" src="http://dev.net.ua/blogs/denisreznik/GodMode_thumb_29C2BA77.jpg" width="661" height="530"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; В семёрке этот трюк проделывается без проблем. В теории (не пробовал) должно работать на &lt;a href="http://blogs.lessthandot.com/index.php/ITProfessionals/EthicsIT/how-to-enable-godmode-on-windows-7?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+LessThanDotBlogs+%28LessThanDot+-+All+Blogs%29&amp;amp;utm_content=Google+Reader" target="_blank"&gt;32-х битных Vista и Server 2008&lt;/a&gt;. “Божественного”, как видите, здесь ничего нет, но то, что это возможность скрытая, да и само название “GodMode” подогревает интерес, согласитесь :)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Но, на самом деле, эта возможность не совсем скрытая. Элементам панели управления присвоены &lt;a href="http://msdn.microsoft.com/en-us/library/ee330741(VS.85).aspx" target="_blank"&gt;канонические имена для программного запуска этих элементов&lt;/a&gt;, и &lt;a href="http://msdn.microsoft.com/en-us/library/cc144096(VS.85).aspx#virtual" target="_blank"&gt;использовав вот такой гуид в имени папки&lt;/a&gt; - {E2E7934B-DCE5-43C4-9576-7FE4F75E7480} можно получить на своём рабочем столе натройки даты и времени. Недокументировано только само каноническое имя - {ED7BA470-8E54-465E-825C-99712043E01C} (поиск по MSDN выдал только ссылки на блоги).&amp;nbsp; А громкое название в имени папки, тоже можно заменить на что-то другое, например “test.{ED7BA470-8E54-465E-825C-99712043E01C}” даст нам тот же “режим бога” только с именем “test” :)&lt;/p&gt; &lt;p&gt;Ссылки по теме:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;- &lt;a href="http://news.cnet.com/8301-13860_3-10423985-56.html?tag=digg2"&gt;Блог открывателя “режима бога”&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://blogs.lessthandot.com/index.php/ITProfessionals/EthicsIT/how-to-enable-godmode-on-windows-7?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+LessThanDotBlogs+%28LessThanDot+-+All+Blogs%29&amp;amp;utm_content=Google+Reader"&gt;Блог SQLDenis&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://www.winline.ru/news/5984.php"&gt;Лента новостей winline.ru&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/library/ee330741(VS.85).aspx"&gt;Канонические имена элементов панели управления&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/library/cc144096(VS.85).aspx#virtual"&gt;Использование папок для доступа к элементам панели управления&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9208" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Windows/default.aspx">Windows</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_40043504360438043C04_+_31043E0433043004_/default.aspx">режим бога</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/god+mode/default.aspx">god mode</category></item><item><title>Microsoft Codenames</title><link>http://dev.net.ua/blogs/denisreznik/archive/2009/12/23/9150.aspx</link><pubDate>Tue, 22 Dec 2009 22:10:18 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9150</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>0</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9150.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9150</wfw:commentRss><description>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Не знаю как вам, а мне очень нравятся различные &lt;a href="http://en.wikipedia.org/wiki/List_of_Microsoft_codenames" target="_blank"&gt;codenames&lt;/a&gt;, которые Microsoft даёт своим продуктам во время разработки. Над происхождением их никогда особо не задумывался, но, как оказалось, берутся они не с потолка, и в именовании продуктов есть определённый смысл.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Вот, например, кодовые имена известных вам семейств продуктов Microsoft:&lt;/p&gt; &lt;p&gt; &lt;table style="text-align:center;border-right-width:1px;width:45%;float:left;border-top-width:1px;border-bottom-width:1px;margin-left:20px;border-left-width:1px;"&gt;  &lt;tr style="background:#ddddd1;"&gt; &lt;td colspan="2"&gt;&lt;b&gt;Windows Client&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="background:#dddddd;"&gt;&lt;b&gt;Product&lt;/b&gt;&lt;/td&gt; &lt;td style="background:#dddddd;"&gt;&lt;b&gt;Codename&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="background:#eeeeee;"&gt;Windows XP &lt;/td&gt; &lt;td&gt;Whistler &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Windows Vista &lt;/td&gt; &lt;td style="background:#eeeeee;"&gt;Longhorn &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="background:#eeeeee;"&gt;Windows 7 &lt;/td&gt; &lt;td&gt;Blackomb &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Windows XP Starter Edition &lt;/td&gt; &lt;td style="background:#eeeeee;"&gt;Creekside &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;table style="text-align:center;border-right-width:1px;width:45%;float:right;border-top-width:1px;border-bottom-width:1px;border-left-width:1px;margin-right:20px;"&gt;  &lt;tr style="background:#ddddd1;"&gt; &lt;td colspan="2"&gt;&lt;b&gt;Development Tools&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="background:#dddddd;"&gt;&lt;b&gt;Product&lt;/b&gt;&lt;/td&gt; &lt;td style="background:#dddddd;"&gt;&lt;b&gt;Codename&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="background:#eeeeee;"&gt;Visual Studio 2005 &lt;/td&gt; &lt;td&gt;Whitbey &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Visual Studio 2008 &lt;/td&gt; &lt;td style="background:#eeeeee;"&gt;Orcas &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="background:#eeeeee;"&gt;Visual Studio Team System 2008 &lt;/td&gt; &lt;td&gt;Rosario &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Visual Studio 2010 &lt;/td&gt; &lt;td style="background:#eeeeee;"&gt;Hawaii &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Из этих таблиц видно, что кодовые имена продуктов семейства Windows – это названия горнолыжных курортов. А имена семейства Development Tools – названия островов. Интересно, правда? В своём вебкасте Mary Jo Foley (Microsoft Codename Queen) более подробно рассказывает о политике присвоения codenames продуктам Майкрософт: &lt;/p&gt; &lt;div style="text-align:center;margin-top:10px;margin-bottom:10px;"&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CLbBYcesX4A&amp;amp;hl=ru_RU&amp;amp;fs=1&amp;amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/CLbBYcesX4A&amp;amp;hl=ru_RU&amp;amp;fs=1&amp;amp;rel=0" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Более подробно об истории этих и многих других codenames, можно узнать из серии постов “Microsoft Codenames” в блоге Mary Jo Foley - &lt;a title="http://xtourl.com/22li" href="http://xtourl.com/22li" target="_blank"&gt;http://xtourl.com/22li&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ссылки по теме:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;- &lt;a href="http://blogs.zdnet.com/topic/Microsoft+codenames.html"&gt;Серия постов, посвящённым Microsoft Codenames&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://en.wikipedia.org/wiki/List_of_Microsoft_codenames"&gt;Список различных codenames&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://news.zdnet.com/2422-13569_22-152877.html"&gt;Вебкаст Mary Jo Foley “Microsoft code names explained”&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9150" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Development+Tools/default.aspx">Development Tools</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Windows/default.aspx">Windows</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Microsoft+Codenames/default.aspx">Microsoft Codenames</category></item><item><title>И снова о COUNT</title><link>http://dev.net.ua/blogs/denisreznik/archive/2009/12/20/9138.aspx</link><pubDate>Sun, 20 Dec 2009 11:45:11 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9138</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>0</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9138.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9138</wfw:commentRss><description>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; После своего &lt;a href="http://dev.net.ua/blogs/denisreznik/archive/2009/11/17/9031.aspx" target="_blank"&gt;поста&lt;/a&gt;, рассказывающего о том, как можно оптимизировать подсчёт строк в таблице, мне несколько раз задавали вопрос о том, как работает &lt;a href="http://msdn.microsoft.com/ru-ru/library/ms175997.aspx" target="_blank"&gt;COUNT&lt;/a&gt;. И теперь, я хочу поделиться этой ценной информацией.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Функция подсчёта строк, всегда пробегает по всем записям таблицы, т.е. последовательно их перебирает в памяти (если не используется условие WHERE). С этим связан довольно распространённый миф: “COUNT(имя_поля) лучше использовать чем COUNT(*), т.к. мы явно указываем по какому полю делать перебор, и в этом случае оптимизатор будет использовать индекс”. На самом деле это не так. Если для таблицы созданы индексы, то перебирается листовой уровень индекса с наименьшим размером ключа, таким образом оптимизатор сам выбирает наиболее оптимальный план выполнения, в независимости от того, что вы указываете в условии COUNT. В этом можно убедиться, запустив пару скриптов.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Вначале создадим тестовую таблицу, заполним её данными и создадим необходимые для теста индексы (если вставить в таблицу меньшее количество записей (например 100), то использоваться будет IDX_BIG (думаю в этом случае оптимизатору просто не хватает информации)):&lt;/p&gt; &lt;blockquote style="background-color:lightgrey;"&gt;&lt;pre style="font-family:monospace;" class="tsql"&gt;&lt;span style="color:#0000ff;"&gt;CREATE&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;TABLE&lt;/span&gt; dbo.&lt;span style="color:#202020;"&gt;Test&lt;/span&gt;
&lt;span style="color:#808080;"&gt;(&lt;/span&gt;Id &lt;span style="color:#0000ff;"&gt;int &lt;/span&gt;&lt;span style="color:#808080;"&gt;NOT&lt;/span&gt; &lt;span style="color:#808080;"&gt;NULL&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;IDENTITY&lt;/span&gt;&lt;span style="color:#808080;"&gt;(&lt;/span&gt;&lt;span style="color:#000;"&gt;1&lt;/span&gt;,&lt;span style="color:#000;"&gt;1&lt;/span&gt;&lt;span style="color:#808080;"&gt;)&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;KEY&lt;/span&gt;, SmallField &lt;span style="color:#0000ff;"&gt;tinyint &lt;/span&gt;&lt;span style="color:#808080;"&gt;NOT&lt;/span&gt; &lt;span style="color:#808080;"&gt;NULL&lt;/span&gt;, BigField &lt;span style="color:#0000ff;"&gt;bigint &lt;/span&gt;&lt;span style="color:#808080;"&gt;NOT&lt;/span&gt; &lt;span style="color:#808080;"&gt;NULL&lt;/span&gt;&lt;span style="color:#808080;"&gt;)&lt;/span&gt;
GO
&lt;span style="color:#0000ff;"&gt;CREATE&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;INDEX&lt;/span&gt; IDX_SMALL &lt;span style="color:#0000ff;"&gt;ON&lt;/span&gt; dbo.&lt;span style="color:#202020;"&gt;Test&lt;/span&gt;&lt;span style="color:#808080;"&gt;(&lt;/span&gt;SmallField&lt;span style="color:#808080;"&gt;)&lt;/span&gt;
GO
&lt;span style="color:#0000ff;"&gt;CREATE&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;INDEX&lt;/span&gt; IDX_BIG &lt;span style="color:#0000ff;"&gt;ON&lt;/span&gt; dbo.&lt;span style="color:#202020;"&gt;Test&lt;/span&gt;&lt;span style="color:#808080;"&gt;(&lt;/span&gt;BigField&lt;span style="color:#808080;"&gt;)&lt;/span&gt;
GO
&lt;span style="color:#0000ff;"&gt;INSERT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;INTO&lt;/span&gt; dbo.&lt;span style="color:#202020;"&gt;Test&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;VALUES&lt;/span&gt;&lt;span style="color:#808080;"&gt;(&lt;/span&gt;&lt;span style="color:#000;"&gt;1&lt;/span&gt;, &lt;span style="color:#000;"&gt;2&lt;/span&gt;&lt;span style="color:#808080;"&gt;)&lt;/span&gt;
GO &lt;span style="color:#000;"&gt;1000&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; И выполним инструкции COUNT в различном формате:&lt;/p&gt;
&lt;blockquote style="background-color:lightgrey;"&gt;&lt;pre style="font-family:monospace;" class="tsql"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color:#ff00ff;"&gt;COUNT&lt;/span&gt;&lt;span style="color:#808080;"&gt;(&lt;/span&gt;&lt;span style="color:#808080;"&gt;*&lt;/span&gt;&lt;span style="color:#808080;"&gt;)&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; dbo.&lt;span style="color:#202020;"&gt;Test&lt;/span&gt;
GO
&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color:#ff00ff;"&gt;COUNT&lt;/span&gt;&lt;span style="color:#808080;"&gt;(&lt;/span&gt;BigField&lt;span style="color:#808080;"&gt;)&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; dbo.&lt;span style="color:#202020;"&gt;Test&lt;/span&gt;
GO
&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color:#ff00ff;"&gt;COUNT&lt;/span&gt;&lt;span style="color:#808080;"&gt;(&lt;/span&gt;&lt;span style="color:#000;"&gt;1&lt;/span&gt;&lt;span style="color:#808080;"&gt;)&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; dbo.&lt;span style="color:#202020;"&gt;Test&lt;/span&gt;
GO&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Из планов выполнения видно, что в любом случае используется наименьший индекс IDX_SMALL:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dev.net.ua/blogs/denisreznik/count_plans_51072AC5.jpg" target="_blank"&gt;&lt;img style="border-right-width:0px;margin:10px auto;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="count_plans" border="0" alt="count_plans" src="http://dev.net.ua/blogs/denisreznik/count_plans_thumb_2743AFD2.jpg" width="502" height="346"&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Если удалить IDX_SMALL, то будет сканироваться IDX_BIG, т.к. в этом случае он станет самым маленьким. Если же удалить и его, будет сканироваться первичный ключ таблицы. В данном примере показан пример полного сканирования таблицы. Если у вас есть конкретное условие WHERE или поля NULL, то в запросе будет использоваться индекс указанного в запросе поля.&lt;/p&gt;
&lt;p&gt;PS: Думаю выкладывать скрипты, планы выполнения, и другие материалы используемые в постах, в свой Sky Drive - &lt;a title="http://xtourl.com/22et" href="http://xtourl.com/22et" target="_blank"&gt;http://xtourl.com/22et&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ссылки по теме:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;- &lt;a href="http://www.sqlskills.com/BLOGS/PAUL/post/Which-index-will-SQL-Server-use-to-count-all-rows.aspx"&gt;Блог Пола Рэндала&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://thehobt.blogspot.com/2008/12/debunking-myth-select-count-vs-select.html"&gt;Блог Аарона Альтона&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://msdn.microsoft.com/ru-ru/library/ms175997.aspx"&gt;Функция COUNT&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://dev.net.ua/blogs/denisreznik/archive/2009/11/17/9031.aspx"&gt;Альтернатива COUNT(*)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://xtourl.com/22et"&gt;Материалы поста&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9138" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/COUNT/default.aspx">COUNT</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Index/default.aspx">Index</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_18043D04340435043A044104_/default.aspx">Индекс</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_1C0438044404_/default.aspx">Миф</category></item><item><title>Работа с SQL Azure Database - Вебкаст</title><link>http://dev.net.ua/blogs/denisreznik/archive/2009/12/11/9109.aspx</link><pubDate>Fri, 11 Dec 2009 09:12:30 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9109</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>0</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9109.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9109</wfw:commentRss><description>&lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; На встрече &lt;a href="http://dev.net.ua/blogs/katerinadrobotko/archive/2009/11/25/9049.aspx" target="_blank"&gt;UNETA 27 ноября&lt;/a&gt; я выступал с докладом на тему “SQL Azure Database”. Впоследствии я записал вебкаст на эту же тему. Вебкаст содержит краткий обзор возможностей SQL Azure Database, и демонстрации с моего доклада на&amp;nbsp; встрече UNETA. Посмотреть его можно на &lt;a href="http://www.techdays.in.ua/" target="_blank"&gt;techdays.in.ua&lt;/a&gt; - &lt;a title="http://www.techdays.in.ua/videos/2107.html" href="http://www.techdays.in.ua/videos/2107.html"&gt;http://www.techdays.in.ua/videos/2107.html&lt;/a&gt;. Полный вариант презентации можно скачать здесь - &lt;a title="http://dev.net.ua/files/folders/unetameetings/entry9068.aspx" href="http://dev.net.ua/files/folders/unetameetings/entry9068.aspx"&gt;http://dev.net.ua/files/folders/unetameetings/entry9068.aspx&lt;/a&gt;. Если у вас есть вопросы по данной теме, пишите в комментариях или на почту – DenisReznik[dog]live[dot]ru.&lt;/p&gt; &lt;p align="justify"&gt;Ссылки по теме:&lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;- &lt;a href="http://www.techdays.in.ua/videos/2107.html"&gt;Вебкаст на тему “Работа с SQL Azure Database”&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;- &lt;a href="http://dev.net.ua/files/folders/unetameetings/entry9068.aspx"&gt;Полный вариант презентации доклада “SQL Azure Database”&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;- &lt;a href="http://dev.net.ua/blogs/denisreznik/archive/2009/11/29/9070.aspx"&gt;Вопросы с доклада на тему “SQL Azure Database”&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://dev.net.ua/blogs/denisreznik/archive/2009/11/22/9044.aspx"&gt;Работа с SQL Azure с помощью SSMS&lt;/a&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/sqlserver/dataservices/default.aspx"&gt;Сайт SQL Azure&lt;/a&gt; &lt;p&gt;- &lt;a href="http://dev.net.ua/blogs/denisreznik/archive/2009/07/17/8669.aspx"&gt;Цены на SQL Azure&lt;/a&gt; &lt;p&gt;- &lt;a href="http://sql.azure.com/"&gt;SQL Azure developer portal&lt;/a&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/library/ee336281.aspx"&gt;T-SQL в SQL Azure Database&lt;/a&gt; &lt;p&gt;- &lt;a href="http://blogs.msdn.com/ssds/"&gt;Блог комманды SQL Azure&lt;/a&gt; &lt;p&gt;- &lt;a href="http://cloud.in.ua/"&gt;По дороге с облаками&lt;/a&gt; &lt;p&gt;- &lt;a href="http://microsoftpdc.com/Sessions/Tags/SQLAzure"&gt;Видео с PDC 2009, содержащее тэг “SQL Azure”&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9109" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SSMS/default.aspx">SSMS</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Azure/default.aspx">SQL Azure</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/UNETA/default.aspx">UNETA</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server+Management+Studio/default.aspx">SQL Server Management Studio</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/T-SQL/default.aspx">T-SQL</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Azure+Database/default.aspx">SQL Azure Database</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Webcast/default.aspx">Webcast</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_1204350431043A04300441044204_/default.aspx">Вебкаст</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_12043804340435043E04_/default.aspx">Видео</category></item><item><title>Материалы доклада “SQL Azure Database”</title><link>http://dev.net.ua/blogs/denisreznik/archive/2009/11/29/9070.aspx</link><pubDate>Sun, 29 Nov 2009 14:05:38 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9070</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>1</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9070.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9070</wfw:commentRss><description>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 27 ноября состоялась очередная &lt;a href="http://dev.net.ua/blogs/katerinadrobotko/archive/2009/11/25/9049.aspx" target="_blank"&gt;встреча UNETA&lt;/a&gt;, на которой я выступал с докладом о “SQL Azure Database”. В докладе был представлен обзор имеющихся возможностей, принципов работы, истории продукта, направлений развития, а также описана стратегия вывода продукта на рынок. Материалы доклада находятся здесь - &lt;a title="http://xtourl.com/229d" href="http://xtourl.com/229d"&gt;http://xtourl.com/229d&lt;/a&gt;.&lt;/p&gt; &lt;p&gt; И, в заключение, чтобы пост не получился таким скучным, хочу привести несколько наиболее актуальных вопросов, заданных в ходе доклада:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Когда планируется выход продукта на рынок?&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;С 1-го января SQL Azure Database будет доступна для промышленного использования в США, странах юго-восточной Азии и северной Европы. У стран СНГ возможность использовать SQL Azure появится позже, но точные даты пока не известны.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Сколько нужно платить за использование?&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Есть 2 редакции, Web и Business Edition, ограниченные размером базы в 1 и 10 Гб соответственно. Web стоит $9.99 в месяц, Business $99.9 в месяц (хранение данных). Трафик тарифицируется погигабайтно: 10 центов входящий, 15 исходящий. Трафик между приложением, находящимся в Windows Azure и БД в SQL Azure Database не тарифицируется.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Для кого предназначен данный продукт?&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;В таком виде как сейчас SQL Azure Database больше всего подходит для стартапов (за счёт минимальных стартовые денежных вливаний) и для небольших компаний (ограничение на размер базы в 1 и 10 Гб), имеюших географически удалённые филиалы (респределение данных между географически удалёнными серверами).&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Чем обусловлено, то, что размер базы ограничен 1 и 10 Гб, для Web и Business Edition соответственно?&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Ответ с форумов майкрософт был таков, что это обусловлено текущими потребностями рынка и основан на результатах опроса. Но такая ценовая политика это только начало, в дальнейшем она будет двигаться в сторону “Pay as you go”, где пользователи будут платить за те ресурсы, которые они используют.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Есть ли похожие продукты?&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Да, Amazon уже представил &lt;a href="http://way2cloud.ru/post/2009/11/02/029099EE843CB14E84F89E075B768AD9.aspx" target="_blank"&gt;свой продукт&lt;/a&gt; общественности, и не за горами предоставление подобных сервисов от Google и других компаний.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Что с защитой данных? Есть ли сейчас какие-нибудь гарантии, того, что мои данные не пропадут?&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;С точки зрения высокой доступности, то уже сейчас есть механизм её поддержания (кроме, непосредственно БД, с которой вы работаете, хранится ещё 2 реплики, одна из которых, в случае падения основной, включается в работу). Важные данные с SQL Azure Database вы можете копировать локально с помощью пакетов SSIS, для предотвращения порчи или потери данных в результате каких-либо действий пользователя. В дальнейшем планируется функционал клонирования БД, позволяющий создвать копию вашей базы по требованию (1 пол. 2010 года) и реализация полноценного бэкапа, с возможностью восстановления данных на конкретный момент времени (2 пол. 2010 года).&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Что делать с конфиденциальными данными? Могу ли я доверить их Майкрософт?&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;С точки зрения защиты самих данных от несанкцинированного доступа, есть защита с помощью настраиваемых правил файервола, где вы можете ограничить список IP с которых может быть осуществлён доступ к данным. В то же время, зашиты от “Билла Гейтса” нет, и прозрачного шифрования данных, которое, на мой взгляд, могло бы стать решением этой проблемы, тоже пока нет, но планируется в дальнейшем. Сейчас же вы можете шифровать конфиденциальные данные перед предачей их в облако.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Ссылки по теме:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;- &lt;a href="http://dev.net.ua/files/folders/unetameetings/entry9068.aspx"&gt;Материалы доклада “SQL Azure Database”&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://dev.net.ua/blogs/denisreznik/archive/2009/11/22/9044.aspx"&gt;Работа с SQL Azure с помощью SSMS&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/sqlserver/dataservices/default.aspx"&gt;Сайт SQL Azure&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://dev.net.ua/blogs/denisreznik/archive/2009/07/17/8669.aspx"&gt;Цены на SQL Azure&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://sql.azure.com/"&gt;SQL Azure developer portal&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/library/ee336281.aspx"&gt;T-SQL в SQL Azure Database&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://blogs.msdn.com/ssds/"&gt;Блог комманды SQL Azure&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9070" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Azure/default.aspx">SQL Azure</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Cloud/default.aspx">Cloud</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/UNETA/default.aspx">UNETA</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Azure+Database/default.aspx">SQL Azure Database</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_25041D04230420042D04_/default.aspx">ХНУРЭ</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/_2504300440044C043A043E043204_/default.aspx">Харьков</category></item><item><title>Работа с SQL Azure Database</title><link>http://dev.net.ua/blogs/denisreznik/archive/2009/11/22/9044.aspx</link><pubDate>Sun, 22 Nov 2009 18:52:42 GMT</pubDate><guid isPermaLink="false">434e5f47-9beb-46b7-aee2-adf5f643f7c6:9044</guid><dc:creator>Denis Reznik</dc:creator><slash:comments>5</slash:comments><comments>http://dev.net.ua/blogs/denisreznik/comments/9044.aspx</comments><wfw:commentRss>http://dev.net.ua/blogs/denisreznik/commentrss.aspx?PostID=9044</wfw:commentRss><description>&lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/windowsazure/sqlazure/" target="_blank"&gt;SQL Azure Database&lt;/a&gt; – сервис хранения и обработки реляционных данных в облаке или, попросту говоря, “облачная” база данных. Первые версии и демонстрации продукта появились более года назад (тогда он ещё назывался SSDS – SQL Server Data Services), затем продукт был представлен как SQL Data Services на PDC 2008, и, впоследствии, &lt;a href="http://cloud.in.ua/post/2009/07/10/E78397A22DBAC748A78319064C339719.aspx" target="_blank"&gt;переименован в SQL Azure Database&lt;/a&gt;, который в скором времени выйдет в промышленную эксплуатацию. И вот, наконец-то, наряду с возможностью работы с данными с помощью T-SQL команд, с выпуском ноябрьского &lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/R2Downloads.aspx" target="_blank"&gt;СTP SQL Server 2008 R2&lt;/a&gt; появилась возможность работать с SQL Server Database с помощью привычного нам инструмента – SQL Server Management Studio, что я конечно же попробовал, и теперь хочу поделиться своим опытом и впечатлениями.&lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Чтобы начать работу с SQL Azure Database нужен аккаунт SQL Azure. Если он у вас уже есть, идём на &lt;a title="https://sql.azure.com/" href="https://sql.azure.com/" target="_blank"&gt;sql.azure.com&lt;/a&gt;, если нет, то можно &lt;a href="http://go.microsoft.com/fwlink/?LinkID=149681&amp;amp;clcid=0x09" target="_blank"&gt;зарегестрироваться для получения приглашения&lt;/a&gt;. После того, как вы вошли в систему с помощью своего Live ID, вы увидите свой сервер. Сервер, в данном случае, не является экземпляром SQL Server, здесь это некая логическая единица. На сервере уже создана одна БД - master:&lt;/p&gt; &lt;div style="margin:10px 10px 10px 20px;"&gt;&lt;a href="http://dev.net.ua/blogs/denisreznik/sql_azure_server_21C8A928.jpg" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="sql_azure_server" border="0" alt="sql_azure_server" align="left" src="http://dev.net.ua/blogs/denisreznik/sql_azure_server_thumb_78DD941E.jpg" width="427" height="332"&gt;&lt;/a&gt;&lt;/div&gt; &lt;p style="marging-left:10px;" align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Удалённый доступ к SQL Asure Database по умолчанию отключён. Чтобы включить его нужно перейти на закладку “Firewall Settings” и добавить свой IP в список разрешённых адресов (IP определяется сам, вам только нужно скопировать и вставить его в поле. Мелочь, а приятно :)): &lt;/p&gt; &lt;p&gt;&lt;a href="http://dev.net.ua/blogs/denisreznik/firewall_settings_1747D508.jpg" target="_blank"&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" title="firewall_settings" border="0" alt="firewall_settings" src="http://dev.net.ua/blogs/denisreznik/firewall_settings_thumb_5156A1E7.jpg" width="348" height="243"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Новые настройки файервола вступают в действие через пять минут. Есть возможность расслабиться и почитать что-нибудь про &lt;a href="http://msdn.microsoft.com/en-us/sqlserver/dataservices/default.aspx" target="_blank"&gt;SQL Azure&lt;/a&gt; :). Итак, приступаем к работе. Для соединения с сервером нужно скопировать имя сервера с портала, выбрать тип аутентификации SQL Server (Windows аутентификация не поддерживается) и ввести имя пользователя и пароль, указанные вами при создании аккаунта SQL Azure. Если вдруг забудете пароль, его можно будет легко поменять прямо на портале. Первое, что бросается в глаза – отсутствие многих пунктов контекстного меню, при нажатии правой кнопкой на различных узлах в Object Explorer:&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://dev.net.ua/blogs/denisreznik/sql_azure_ob_explorer_214C5066.jpg" target="_blank"&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" title="sql_azure_ob_explorer" border="0" alt="sql_azure_ob_explorer" src="http://dev.net.ua/blogs/denisreznik/sql_azure_ob_explorer_thumb_2C2931AE.jpg" width="385" height="291"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Для того, чтобы посмотреть на поддержку T-SQL, я сгенерировал студией скрипты БД Northwind, и попытался накатить их на “облачный” сервер, и поработать с “облачной базой”. Итак, первые впечатления:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;- CREATE DATABASE не поддерживает разбиение на файловые группы (базу также можно создать прямо с портала)&lt;/p&gt; &lt;p&gt;- ALTER DATABASE не поддерживается&lt;/p&gt; &lt;p&gt;- Поддерживается создание логинов&lt;/p&gt; &lt;p&gt;- Не поддерживается переключение контекста с помощью USE (чтобы начать работать в новой, созданной БД, нужно явно открыть соединение с ней)&lt;/p&gt; &lt;p&gt;- Поддерживаются DDL команды создания практически всех объектов БД &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;- Настройки индекса при создании не поддерживаются (FILLFACTOR и т.п.)&lt;/p&gt; &lt;p&gt;(если из студии сгенерировать скрипт “облачной” БД, то накатить его в облаке будет нельзя, т.к. он содержит и USE и ALTER DATABASE и неподдерживаемые настройки индексов)&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;- Поддерживаются базовые команды T-SQL&lt;/p&gt; &lt;p&gt;- В контекстном меню таблицы нет привычного пункта SELECT TOP 1000 rows&lt;/p&gt; &lt;p&gt;- Интеллисенс не работает&lt;/p&gt; &lt;p&gt;- Поддерживает типы данных SQL Server 2008 (за исключением HierarchyId, Geometry и Geography)&lt;/p&gt; &lt;p&gt;- Доступна работа с планами выполнения&lt;/p&gt; &lt;p&gt;- При раскрытии узла репликации в Object Explorer, вылетает “Operation not supported”. &lt;/p&gt; &lt;p&gt;- Profiler и Activity Monitor недоступны&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Более подробно об &lt;a href="http://msdn.microsoft.com/en-us/library/ee336245.aspx" target="_blank"&gt;ограничениях текущей версии&lt;/a&gt; и о &lt;a href="http://msdn.microsoft.com/en-us/library/ee336281.aspx" target="_blank"&gt;доступных возможностях T-SQL&lt;/a&gt; можно прочитать на &lt;a href="http://msdn.microsoft.com/en-us/library/ee336279.aspx" target="_blank"&gt;странице продукта в MSDN&lt;/a&gt;.&amp;nbsp; В целом же&amp;nbsp; впечатление остаётся приятное, и работа с SQL Azure кажется чем-то привычным. Текущая версия SQL Azure Database является “feature complete” и большинство её ограничений связано с самим принципом предоставления&amp;nbsp; облачного сервиса (сокрытие физических аспектов от потребителей).&amp;nbsp; И в заключение хочу сказать, что на &lt;a href="http://microsoftpdc.com/Sessions/SVC52" target="_blank"&gt;PDC 2009&lt;/a&gt; была объявлена дата ввода продукта в промышленную эксплуатацию – 1 января 2010 года (для США, стран юго-восточной Азии и северной европы). У нас это будет немного позже. Ещё интересный момент – первый месяц эксплуатации будет бесплатным.&lt;/p&gt; &lt;p&gt;Ссылки по теме:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/sqlserver/dataservices/default.aspx"&gt;Сайт SQL Azure&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;- &lt;a href="http://sql.azure.com/"&gt;SQL Azure developer portal&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/library/ee336281.aspx"&gt;T-SQL в SQL Azure Database&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://blogs.msdn.com/ssds/"&gt;Блог комманды SQL Azure&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://cloud.in.ua/"&gt;По дороге с облаками&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/library/ee336279.aspx"&gt;SQL Azure – MSDN&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://blogs.msdn.com/ssds/archive/2009/11/11/9921041.aspx"&gt;SQL Server 2008 R2 Management Studio Download&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://www.brentozar.com/archive/2009/11/playing-around-with-sql-azure-and-ssms/"&gt;Brent Ozar blog&lt;/a&gt;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://microsoftpdc.com/Sessions/Tags/SQLAzure"&gt;Видео с PDC 2009, содержащее тэг “SQL Azure”&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=9044" width="1" height="1"&gt;</description><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SSMS/default.aspx">SSMS</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Azure/default.aspx">SQL Azure</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Server+Management+Studio/default.aspx">SQL Server Management Studio</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/T-SQL/default.aspx">T-SQL</category><category domain="http://dev.net.ua/blogs/denisreznik/archive/tags/SQL+Azure+Database/default.aspx">SQL Azure Database</category></item></channel></rss>