Главная SQL, Новое SQL Server 2005, 2008: Создание недостающих индексов
  • SQL Server 2005, 2008: Создание недостающих индексов

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

    А как получить эти сведения, обработать и принять решение о необходимости создания тех или иных индексов?

    Интересная методика представлена в Учебном курсе Microsoft “SQL Server 2005 Реализация и обслуживание”.
    Решение о эффективности индекса предлагается принять из расчета некоторого значения по формуле user_seeks * avg_total_user_cost * (avg_user_impact * 0.01). Исходные данные для расчета берутся из представлений sys.dm_db_missing_index*.
    Значение выше 5000 в промышленных системах означает, что следует рассмотреть возможность создания этих индексов.
    Если же значение превышает 10000, это обычно означает, что индекс может обеспечить значительное повышение производительности для операций чтения.
    Немного творчества и получаем вот такой скрипт:

    --------------------------------------------------------------------------------------------
    
    -- Создание недостающих индексов баз данных на SQL Server 2005, 2008
    
    --
    
    -- Скрипт анализирует статистику, собранную сервером баз данных об отсутствующих индексах в базах данных и
    
    -- предлагает создать индексы, которые могут обеспечить значительное повышение производительности. 
    
    SET NOCOUNT ON
    
    DECLARE @dbid int
    
    IF (object_id('tempdb..##IndexAdvantage') IS NOT NULL) DROP TABLE ##IndexAdvantage
    
    CREATE TABLE ##IndexAdvantage ([Преимущество индекса] float, [База данных] varchar(64), [Transact SQL код для создания индекса] varchar(512),
    
    [Число компиляций] int, [Количество операций поиска] int, [Количество операций просмотра] int,
    
    [Средняя стоимость ] int, [Средний процент выигрыша] int );
    
    DECLARE DBases CURSOR FOR
    
    SELECT database_id FROM sys.master_files -- Получаем список ID баз данных
    
    WHERE state = 0 AND -- ONLINE
    
    has_dbaccess(db_name(database_id)) = 1 -- Only look at databases to which we have access
    
    GROUP BY database_id
    
    OPEN DBases
    
    FETCH NEXT FROM DBases
    
    INTO @dbid
    
    WHILE @@FETCH_STATUS = 0
    
    BEGIN -- Выполняем для каждой базы данных --------------------------------------------------
    
    INSERT INTO ##IndexAdvantage
    
    SELECT [Преимущество индекса] = user_seeks * avg_total_user_cost * (avg_user_impact * 0.01),
    
          [База данных] = DB_NAME(mid.database_id),
    
          [Transact SQL код для создания индекса] = 'CREATE INDEX [IX_' + OBJECT_NAME(mid.object_id,@dbid) + '_' +
    
          CAST(mid.index_handle AS nvarchar) + '] ON ' +
    
          mid.statement + ' (' + ISNULL(mid.equality_columns,'') +
    
          (CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ', '
    
    ELSE '' END) +
    
          (CASE WHEN mid.inequality_columns IS NOT NULL THEN + mid.inequality_columns ELSE '' END) + ')' +
    
          (CASE WHEN mid.included_columns IS NOT NULL THEN ' INCLUDE (' + mid.included_columns + ')'
    
    ELSE '' END) +      ';',
    
          [Число компиляций] = migs.unique_compiles,
    
          [Количество операций поиска] = migs.user_seeks,
    
          [Количество операций просмотра] = migs.user_scans,
    
          [Средняя стоимость ] = CAST(migs.avg_total_user_cost AS int),
    
          [Средний процент выигрыша] = CAST(migs.avg_user_impact AS int)
    
    FROM  sys.dm_db_missing_index_groups mig
    
    JOIN  sys.dm_db_missing_index_group_stats migs
    
    ON    migs.group_handle = mig.index_group_handle
    
    JOIN  sys.dm_db_missing_index_details mid
    
    ON    mig.index_handle = mid.index_handle
    
    AND   mid.database_id = @dbid
    
        FETCH NEXT FROM DBases
    
        INTO @dbid
    
    END ----------------------------------------------------------------------------------------
    
    CLOSE DBases
    
    DEALLOCATE DBases
    
    GO
    
    SELECT * FROM ##IndexAdvantage ORDER BY 1 DESC
    
    -- Значение ''Преимущество индекса'' выше 5000 в промышленных системах означает, что следует рассмотреть возможность создания этих индексов.
    
    -- Если же значение превышает 10000, это обычно означает, что индекс может обеспечить значительное повышение производительности для операций чтения.
    
    --------------------------------------------------------------------------------------------
    
    -- Отправляем email с предложением создать индекс
    
    IF (object_id('tempdb..##IndexAdvantage2') IS NOT NULL) DROP TABLE ##IndexAdvantage2
    
    SELECT * INTO ##IndexAdvantage2 FROM ##IndexAdvantage WHERE [Преимущество индекса] >= 5000 ORDER BY 1 DESC
    
    IF ((SELECT COUNT(*) FROM ##IndexAdvantage2) >= 1) BEGIN
    
    DECLARE @subject_str varchar(255),
    
    @message_str varchar(1024),
    
    @separator_str varchar(1),
    
    @email varchar(128)
    
    SET @separator_str=CHAR(9) -- Символ табуляции
    
    SET @email = 'email_address@webzavod.ru'
    
    -- Подготовим текст сообщения
    
    SET @subject_str = 'SQL Server '+@@SERVERNAME+': Предложение создать индексы в базе данных.'
    
    SET @message_str = 'Сервер '+@@SERVERNAME + '. Выявлена необходимость создать индексы в базе данных!
    
    Во вложении - таблица с кодом предлагаемых индексов.
    
    Значение "Преимущество индекса" выше 5000 в промышленных системах означает, что следует рассмотреть возможность создания этих индексов.
    
    Если же значение превышает 10000, это обычно означает, что индекс может обеспечить значительное повышение производительности для операций чтения.
    
    Динамические административные представления, которые помогли нам получить информацию об отсутствующих индексах, не являются заменой помощника по настройке ядра СУБД, который также рассматривает индексированные представления и секции и обеспечивает более всесторонний анализ индексов, но они могут быть очень эффективны на начальном уровне анализа.'
    
    -- Отправляем email
    
    EXEC msdb.dbo.sp_send_dbmail
    
    @recipients = @email,
    
    @query = 'SELECT * FROM ##IndexAdvantage2',
    
    @subject = @subject_str,
    
    @body = @message_str,
    
    @attach_query_result_as_file = 1,
    
    @query_result_separator = @separator_str,
    
    @query_result_width = 7000
    
    END
    
    -- Удаляем временную таблицу
    
    IF (object_id('tempdb..##IndexAdvantage') IS NOT NULL) DROP TABLE ##IndexAdvantage
    
    IF (object_id('tempdb..##IndexAdvantage2') IS NOT NULL) DROP TABLE ##IndexAdvantage2
    
    --------------------------------------------------------------------------------------------

    Как использовать данный скрипт:

    Можно создать JOB на основе этого скрипта и выполнять его периодически.

    Если скрипт выявит необходимость создать какой либо индекс, то он сообщит Вам об этом, послав электронное письмо (компонент Database Mail должен быть включен и настроен).

    Отмечу также, что если приложение само управляет объектами базы данных, то и индексы следует создавать через функционал данного приложения.

    Пример такого приложения – Microsoft Dynamics AX.

    Илгиз Мамышев

    • Рубрика: SQL,Новое
    • Автор: Илгиз Мамышев
    • Дата: Monday 13 Jul 2009

Комментарии

  1. Для того, чтобы получить информацию о том какие индексы требуется создать, лучше использовать помощник по настрйке ядра (DTA). Можно пользоваться и этим скриптом, но тогда следует детально анализировать использующиеся запросы для определения порядка столбцов в индексе, а DTA эту работу возьмет на себя. Это если верить BOL’у.

  2. Читай в тексте скрипта: “Динамические административные представления, которые помогли нам получить информацию об отсутствующих индексах, не являются заменой помощника по настройке ядра СУБД, который также рассматривает индексированные представления и секции и обеспечивает более всесторонний анализ индексов, но они могут быть очень эффективны на начальном уровне анализа.”

  3. Да, но при этом в том же тексте:
    “Выявлена необходимость создать индексы в базе данных!
    Во вложении – таблица с кодом рекомендуемых индексов.”
    Подобный код индексов не должен “рекомендоваться”, поскольку порядок столбцов в нем не обязательно соответствует оптимальному.

  4. Ок. Замечание принимается. Рекомендацию меняем на предложение индекса.

  5. На сегодняшний день профессия водитель такси известна практически всем,
    и даже более того – овеяна своеобразной таинственностью, поскольку не
    редки случаи, когда таксист живет в своем особом ритме, и очень часто в
    ритме ночного города.

    Для кого-то работа в такси – это основной доход в жизни, для других же –
    это дополнительный заработок. Однако, как в первом, так и во втором случае
    от водителя потребуется, прежде всего, умение хорошо ориентироваться по
    городу и области. Ведь для клиента, независимо от степени популярности
    такси, важен профессионализм водителя, которому он доверяет свою жизнь.
    И от того, насколько умело и оперативно таксист справится с поставленной
    задачей, по большей мере, зависит рейтинг компании такси.

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

    Стать водителем такси не сложно. Если вы обладатель иномарки не старше
    7 лет, имеете стаж вождения 3 года, тогда – будьте уверенны, работой Вы
    обеспечены. Бывают случаи, когда таксовать идут на недавно приобретенном
    в кредит автомобиле. Но, есть и постояльцы, которые за рулем автомобиля
    всю свою сознательную жизнь. Касательно новичков, нужно знать, что
    лучше трудоустраиваться официально, т.к. в настоящее время незаконный
    частный извоз грозит огромными неприятностями вплоть до конфискации
    транспортного средства, а клиенты в последнее время все чаще отдают
    предпочтение официальным такси, как таксопаркам, так и диспетчерским,
    отвечающим в полной мере за предоставленные ими качественные услуги.
    Для водителей имеющих собственные автомобили потребуется лицензия
    на такси, которую, что очень важно, можно получить абсолютно бесплатно
    двумя способами – или в Департаменте транспорта и развития дорожно-
    транспортной инфраструктуры города Москвы (для жителей столицы) или в
    Министерстве транспорта Московской области (для жителей Подмосковья и
    всех регионов России). Совершенно верно, работа в такси в Москве доступна
    любому жителю России. Все вакансии такси вы без труда отыщите на
    сайте http://taxi-job.ru/. Помните, вариант с неофициальным устройством
    чреват последствиями – штрафы, конфискации и беседы с уполномоченными
    органами.

    Для человека, который имеет права и стаж вождения от трех лет, такая
    работа – один из приемлемых вариантов, как основного заработка, так
    подработки, или же совмещения этих двух вариантов. И вовсе не имеет
    значения, есть ли у водителя собственный автомобиль. Без проблем
    можно устроиться работать на авто компании или взять в аренду
    легковой автомобиль с уже готовой лицензией на такси и выполнять
    заказы диспетчерской службы, например лидера рынка Москвы –
    такси «ПРЕСТИЖ», или же других менее популярных компаний, которых в
    столице великое множество.

    Хотите разобраться в тонкостях и преимуществах такси Москвы и даже
    больше?.. Узнать новости, ознакомиться с новинками в сфере такси,
    отыскать информацию о надежных компаниях для работы в такси или
    аренде иномарок с лицензией такси по доступным ценам, а также скидках
    на автомойках и в автосервисах. Все, что необходимо знать о грамотном
    юридическом и бухгалтерском обслуживании, надежном страховании,
    оборудовании для такси, новом программном обеспечении такси, или
    приятно провести досуг – посмотреть интересное фото и видео о такси,
    прочитать отзывы, принять участие в обсуждениях, повысить или понизить
    рейтинг той или иной компании, для чего существует форум такси и список
    такси, все это Вы можете сделать на taxi-job.ru.

    Часто складывается так, что большинство таксистов – люди, испытывающие
    временные материальные трудности, либо же находятся в поисках работы-
    подработки. Таким образом, работа в такси на своей машине становится
    идеальным и наиболее простым способом заработка.

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

    Пишите нам на info@taxi-job.ru. Вопросы, пожелания, консультации,
    сотрудничество, помощь.

    http://taxi-job.ru/ – мы знаем о такси абсолютно все!

  6. РЕГИСТРАЦИЯ

    Старт проекта: 30 ноября 2012
    Платежная система: Monexy ( https://www.monexy.com/ )

    Ваши затраты в проекте составляют всего 100 рублей!

    Преимущества системы

    1. Ваши затраты в проекте составят всего 100 рублей
    2. Ваш чистый доход составит 9 миллионов после заполнения 8-ми уровней
    3. Лично вам нужно пригласить всего троих.
    4. Система работает в автоматическом режиме, больше ничего не нужно подтверждать руками!
    5. В проекте нет проблем с нулевыми уровнями.
    6. В этом проекте не нужно брать отпуск.
    7. Система сама находит вам рефералов! В системе присутствует равномерное распределение участников. Новый участник, пришедший не по реферальной ссылке зарегистрированного участника, становится рефералом участника, у которого наименьшее количество рефералов и который раньше зарегистрировался. Чем быстрее вы приобретете 1 уровень, тем быстрее к вам прейдут рефералы.
    8. Деньги приходят не администрации сайта, а сразу вам на счет.
    9. Оповещение о приходе денег по средствам смс.
    10. Полная статистика ваших уровней и продаж. Каждому участнику будет предоставлена статистика его дистрибьюторов, рефералов и многое другое.

    Как работает:

    После регистрации, вы покупаете 1 уровень у куратора, которого даст вам система. Стоимость первого уровня всего 100 руб, все переводы денег происходят между участниками. Процентов никаких нет, за исключением платежной системы, через которую вы переводите деньги.
    После оплаты уровней, подтверждение происходит автоматически. Теперь не нужно ждать по несколько дней, пока куратор подтвердит ваш платеж. Этим мы добились увеличение скорости заполнения уровней.
    Сразу после активации вашего уровня, робот будет ставить на ваш уровень двух участников, которые заплатят вам по 100 рублей каждый.
    После этого вы в течении 5 дней должны купить 2 уровень у куратора, которого вам опять же даст система. После того как робот заполнит и этот ваш уровень, вы получите на свой кошелек девять платежей по 250 рублей каждый.
    Далее, вы покупаете 3 уровень, после заполнения, получаете на свой кошелек 22 140 рублей и сразу же покупаете 4 уровень, после заполнения которого, вам на кошелек пришлют 202 500 рублей. Этот уровень как и первый покупают ваши непосредственные рефералы, которые находятся сразу же под вами.
    И так далее по схеме заработка. Итого вы получаете более 9 000 000 рублей в нашем проекте.
    Важно: Если ваш уровень заполнен, а вы в течении 5 дней не покупаете следующий уровень, робот деактивирует ваш аккаунт.

    МАРКЕТИНГ ПЛАН ПРОЕКТА

    Структура:

    1 уровень – 3 человека
    2 уровень – 9 человека
    3 уровень – 27 человек
    4 уровень – 81 человек
    5 уровень – 3 человека
    6 уровень – 9 человека
    7 уровень – 27 человек
    8 уровень – 81 человек

    Стоимость каждого уровня:

    1 уровень: вход 100 рублей <<== это все ваши затраты в проекте!
    2 уровень: вход 250 рублей
    3 уровень: вход 820 рублей
    4 уровень: вход 2 500 рублей
    5 уровень: вход 14700 рублей
    6 уровень: вход 21 950,00 рублей
    7 уровень: вход 60 000,00 рублей
    8 уровень: вход 90 000,00 рублей

    Ваш доход с каждого уровня:

    1 уровень: 300 рублей
    2 уровень: 2250 рублей.
    3 уровень: 22 140 рублей.
    4 уровень: 202 500 рублей.
    5 уровень: 44 100 рублей.
    6 уровень: 197 550 рублей.
    7 уровень: 1 620 000 рублей.
    8 уровень: 7 290 000 рублей.

    Итого: 9 млн рублей при вложении 100 рублей!

    РЕГИСТРАЦИЯ

  7. Великий пост
    Антон: Осознание того, что ты немощный человек и вдруг у тебя ушла какая-то страсть, ушло отвратительное желание напиться, обожраться или там что-нибудь еще сделать неприемлемое, непристойное. Вот это радость. Плоды в том, чтобы увидеть, насколько ты…
    http://pravpatriot.ru/post/20-chto-dlya-vas-znachit-velikiy-post.html
    Виктория: Насколько ты слаб. Ну допустим ты съешь эту конфету на ночь, потом ляжешь и будешь думать, вот я не смог от нее отказаться. А почему? И мне кажется, этот вопрос сам по себе: «А почему я не смог отказаться от этой конфеты? Почему плоть так сильна надо мной?» И мне кажется, что возможно это размышление после этой съеденной конфеты на ночь «почему», оно гораздо важнее от не съеденной конфеты «какой я молодец». Для меня лично, главное – это избавление от какой-то страсти. Вот именно побеждать хоть что-то. Хоть что-то. Я не говорю себе: «молодец!» Я говорю: «Слава Богу, что эта гадость от меня ушла». Та гадость, о которой я даже представить себе не могла, что она может уйти в принципе.

  8. Друзья помогите милой девушке (тоесть мне))) выиграть несколько браслетов на мои красивые ручки…)))

    Нужно всего 1 минута внимания – просто зайти и поставить +1 под фото)

    http://vk.com/photo-3777266_300760807

    http://cs313125.vk.me/v313125766/1a3/WMRu5P_D-xk.jpg

    Девушки присоединяйтесь к конкурсу!
    А мужчины могут зарегистрировать свою даму и выиграть ей браслетов!
    Призов хватит на всех))) Пишите в личку поставлю Вам тоже +1!)))

    ВСЕМ СПАСИБКИ!)))

    Группа ВКОНТАКТЕ Браслеты шамбала

  9. не доспустим беспредел в россии Велоспорт. Первый этап Гран-при Сочи выиграл украинский гонщик #ГомосекиНеПройдут

  10. решил помочь и разослал пост в соц. закладки. надеюсь http://forw0man.ru/krasota/obratnyj-french-video-urok – это поднимет популярность.

  11. оборудование для добычи нефти http://imc-systems.ru/category/Oborudovanie-dlja-dobichi-nefti-i-neftehimija/

  12. Глава ТОО “Камал-Ойл” Абай Камалов из Казахстана выиграл
    конкурс на право владения недрами Кутессай II (редкоземельные
    металлы, висмут, молибден и серебро) и Калесай (бериллий, свинец)
    в Кыргызстане.Теперь Абай Камалов должен в течение 30 дней
    оплатить стоимость лицензии – 10 миллионов долларов.

  13. топ 7

    скорость
    невероятные
    грустные видео до слез
    топ самых
    странная находка