Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Прошу помощи с построением индексов.  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
AlexeyMish, вставлю свои пять копеек.
Попробуйте воспользоваться Database Tuning Advisor, насколько я осведомлён, штука очень неплохая. Но честно признаюсь, сам не пользовался, не дошли руки.

И ещё: вы по английски нормально читаете? В msdn всё очень складно по вашей проблеме описано, причём, я всё чаще там же вижу очень неплохие переводы. Это дело одного выходного дня...

PS: После того как местная детвора начала спорить с тем, что зеркальная база лучше копии бекапа, я, ожидая очередной виток подростковой истерии, хочу предупредить, что кормить троллей не намерен. У меня много дел...
26 ноя 13, 01:53    [15188782]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
AlexeyMish
Member

Откуда:
Сообщений: 71
ZOOKABAKODER
AlexeyMish, вставлю свои пять копеек.
Попробуйте воспользоваться Database Tuning Advisor, насколько я осведомлён, штука очень неплохая. Но честно признаюсь, сам не пользовался, не дошли руки.

И ещё: вы по английски нормально читаете? В msdn всё очень складно по вашей проблеме описано, причём, я всё чаще там же вижу очень неплохие переводы. Это дело одного выходного дня...

PS: После того как местная детвора начала спорить с тем, что зеркальная база лучше копии бекапа, я, ожидая очередной виток подростковой истерии, хочу предупредить, что кормить троллей не намерен. У меня много дел...

Благодарю. Читаю нормально, английский не родной, но техническую документацию перевариваю. :)
Насчет бекапов и зеркалирования - это сравнивать теплое с мягким, я вроде как из юношеского максимализма вырос. Кстати, раз пошла такая пьянка, может быть подскажете по моему второму [url=]https://www.sql.ru/forum/1061533/problemy-s-zerkalirovaniem-mirroring-ms-sql-2008r2[/url] посту что-нибудь?
26 ноя 13, 08:07    [15189046]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
AlexeyMish,
и все же - что со статистикой?
менять кластерный не спешите.

+
SELECT name AS stats_name, 
    STATS_DATE(object_id, stats_id) AS statistics_update_date
FROM sys.stats 
WHERE object_id = OBJECT_ID('dbo.I_STATISTICS_CALL_IN');
GO
26 ноя 13, 10:59    [15189855]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
AlexeyMish
Member

Откуда:
Сообщений: 71
AnyKey45,

AnyKey45,

Я пока не стал менять. После явной подсказки оптимизатору какой индекс использовать, скорость работы меня устроила.
Но понять почему он себя так вел, без явного указания было бы неплохо.

PK_I_STATISTICS_CALL_IN	2013-08-15 15:36:01.527
I_STATISTICS_CALL_IN_IDX1	2013-10-31 23:18:03.730
I_STATISTICS_CALL_IN_IDX2	2013-08-21 15:49:04.510
_WA_Sys_00000023_0DAF0CB0	2013-08-15 15:50:46.640
_WA_Sys_00000008_0DAF0CB0	2013-08-21 15:49:25.707
_WA_Sys_0000001F_0DAF0CB0	2013-08-21 15:49:26.330
_WA_Sys_0000001D_0DAF0CB0	2013-08-21 15:49:26.667
_WA_Sys_0000001C_0DAF0CB0	2013-08-15 15:50:49.793
_WA_Sys_00000019_0DAF0CB0	2013-08-21 15:49:26.997
_WA_Sys_00000018_0DAF0CB0	2013-08-21 15:49:27.517
_WA_Sys_00000017_0DAF0CB0	2013-08-21 15:49:28.263
_WA_Sys_00000014_0DAF0CB0	2013-08-21 15:49:28.657
_WA_Sys_00000013_0DAF0CB0	2013-08-21 15:49:29.240
_WA_Sys_00000012_0DAF0CB0	2013-08-21 15:49:30.097
_WA_Sys_0000000F_0DAF0CB0	2013-08-21 15:49:30.770
_WA_Sys_0000000E_0DAF0CB0	2013-08-21 15:49:32.637
_WA_Sys_0000000D_0DAF0CB0	2013-08-21 15:49:34.070
_WA_Sys_00000007_0DAF0CB0	2013-08-21 15:49:06.033
_WA_Sys_00000006_0DAF0CB0	2013-08-21 15:49:34.860
_WA_Sys_00000005_0DAF0CB0	2013-08-21 15:49:36.250
_WA_Sys_0000000B_0DAF0CB0	2013-09-07 11:35:51.427
_WA_Sys_00000004_0DAF0CB0	2013-11-05 08:10:40.387
_WA_Sys_00000003_0DAF0CB0	2013-10-10 08:11:59.853
_WA_Sys_0000000C_0DAF0CB0	2013-08-30 09:29:50.880
_WA_Sys_00000011_0DAF0CB0	2013-11-20 15:04:45.243
_WA_Sys_00000010_0DAF0CB0	2013-08-15 08:26:53.237
_WA_Sys_00000021_0DAF0CB0	2013-09-11 12:46:52.750
_WA_Sys_0000001B_0DAF0CB0	2013-09-20 15:20:33.860
_WA_Sys_0000001A_0DAF0CB0	2012-12-12 12:35:52.727
_WA_Sys_00000016_0DAF0CB0	2013-11-20 15:04:45.843
_WA_Sys_00000009_0DAF0CB0	2013-11-25 17:22:08.607
_WA_Sys_00000001_0DAF0CB0	2013-10-18 12:36:36.897
_WA_Sys_00000015_0DAF0CB0	2013-10-10 08:16:37.337
_WA_Sys_00000020_0DAF0CB0	2013-02-14 13:25:56.590
IDX_DATETIME	2013-10-11 12:41:03.923
IDX_ANUMBERDIALED	2013-10-25 12:26:30.653
IDX_Sumlenght	2013-11-01 07:58:36.690
IDX_callresult	2013-11-01 07:58:37.170
IDX_ServerID_CALLID	2013-11-21 11:27:17.187
IDX_ANUMBER	2013-09-05 14:45:27.907
_WA_Sys_0000001E_0DAF0CB0	2013-09-26 09:57:04.967
_WA_Sys_00000022_0DAF0CB0	2013-09-26 10:40:30.883


Offtop
Как тут оформить текст в виде раскрывающего списка?
что-то не нашел.
26 ноя 13, 11:06    [15189905]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
AlexeyMish,

Ищи лучше - я же нашел)))

IDX_DATETIME 2013-10-11 12:41:03.923 = статистика по индексу, по которому ты заставил работать запрос хинтом
(WITH (nolock, INDEX(IDX_DATETIME)))
обновлялась 11 октября, оптимизатор создает план на основе статистики, т.е. по сути у него план на 11 октября

сделай джоб, который каждый день будет обновлять тебе статистку во время наименьшей нагрузки.
Я использую решение от http://ola.hallengren.com

еще момент по предложенному ранее INCLUDE(Global_ID)= насколько я знаю - кластерный индекс включается в любой некластерный, т.е. в твоем запросе для поиска в WHERE используется IDX_DATETIME, который для SELECT уже содержит в себе кластерный Global_ID
26 ноя 13, 11:24    [15190016]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
AnyKey45,

обнови статистику - только учти это не быстрая операция(зависит от глубины сканирования) и попробуй запрос без хинта - оптимизатор должен будет построить самостоятельно нормально работающий план
26 ноя 13, 11:26    [15190035]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
AlexeyMish
Member

Откуда:
Сообщений: 71
AnyKey45,
Я признаюсь в том, что сделал глупую вещь которую сейчас перепишу, так как стало стыдно. :(

declare @GLOBAL_IDmin (bigint)
declare @GLOBAL_IDmax (bigint)

declare @DT1 float
declare @DT2 float

set @DT1=Convert(float,Convert(datetime,'20131120'))
set @DT2=Convert(float,Convert(datetime,'20131125'))

Select @GLOBAL_IDmin =@min(Global_ID), GLOBAL_IDmax=ax(GLOBAL_ID) from INFDATA_STAT.dbo.I_STATISTICS_CALL_IN
where DATETIME	between @DT1 and @DT2

Select * from from INFDATA_STAT.dbo.I_STATISTICS_CALL_IN
where GLOBAL_ID between GLOBAL_IDmin  and GLOBAL_IDmax
26 ноя 13, 11:32    [15190077]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
AlexeyMish
Member

Откуда:
Сообщений: 71
AnyKey45,
Прошу прощения, за глупый вопрос.
Но в свойствах БД, Auto Update Statistics чем занимается?
Явно не этим, но называние так и шепчет, "я то что надо!".
26 ноя 13, 11:35    [15190097]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Glory
Member

Откуда:
Сообщений: 104760
AlexeyMish
Но в свойствах БД, Auto Update Statistics чем занимается?

Обновлением статистики. Только обновление это не по расписанию. А тогда, когда сложатся условия для обновления.
26 ноя 13, 11:38    [15190120]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
AlexeyMish,

тем чем надо - но не так часто, как бы тебе это хотелось(условия можешь загуглить, по-моему при вставке не менее 20% от имеющихся данных), иначе у тебя вообще даты статистик менялись бы только при ребилде индексов
26 ноя 13, 11:41    [15190137]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Azik23
Member

Откуда:
Сообщений: 11
В какие вы уже дебри залезли :(

ИМХО, тут вопрос в корректности целей получения минимального и максимального значениея ПК: далее планируется работа с ними в качестве ограничений в других запросах, но это уже ошибка проектирования... ИМХО явная ошибка алгоритма, за счет чего серъезные потери временных показателей уже на уровне алгоритма...

ПК - этт фактически служебное поле. В идеале ПК сделать некластеризированным, а кластерным сделать индекс по искомому полю DATETIME, как я понимаю большинство запросов будет задействовывать именно ограничение по датам. Кластерный(физически организованный) индекс наиболее сильный, потому он 1 и может быть на таблице. Посему отойти от получения min и max, а вместо них в других запросах использовать именно диапазон дат. В итоге весь остальной огород здесь наваленный практически теряет смысл :)
26 ноя 13, 17:22    [15193146]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Azik23
Member

Откуда:
Сообщений: 11
AlexeyMish
AnyKey45,
Я признаюсь в том, что сделал глупую вещь которую сейчас перепишу, так как стало стыдно. :(

declare @GLOBAL_IDmin (bigint)
declare @GLOBAL_IDmax (bigint)

declare @DT1 float
declare @DT2 float

set @DT1=Convert(float,Convert(datetime,'20131120'))
set @DT2=Convert(float,Convert(datetime,'20131125'))

Select @GLOBAL_IDmin =@min(Global_ID), GLOBAL_IDmax=ax(GLOBAL_ID) from INFDATA_STAT.dbo.I_STATISTICS_CALL_IN
where DATETIME	between @DT1 and @DT2

Select * from from INFDATA_STAT.dbo.I_STATISTICS_CALL_IN
where GLOBAL_ID between GLOBAL_IDmin  and GLOBAL_IDmax


Вот здесь как раз мы наблюдаем бесполезность выполнения 1-го запроса, если поступить как указано мной выше :)
зы пропустил пост при написании предыдущего сообщения :)
26 ноя 13, 17:25    [15193181]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Azik23
Member

Откуда:
Сообщений: 11
И с nolock поаккуратнее(если вздумаете указывать): этт конечно избавит от ожидания снятия Sx блокировок, но и соответственно приведет к dirty read :)
26 ноя 13, 17:30    [15193238]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Azik23
Member

Откуда:
Сообщений: 11
Очередной пример как задача не стоящая выеденного яйца из-за некомпетентности приводит к удорожанию разработки, без обид ТС :)
26 ноя 13, 17:34    [15193270]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Azik23
Member

Откуда:
Сообщений: 11
aleks2
AlexeyMish
CREATE TABLE [dbo].[I_STATISTICS_CALL_IN](
 CONSTRAINT [PK_I_STATISTICS_CALL_IN] PRIMARY KEY [s]CLUSTERED [/s](
	[GLOBAL_ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


Для работы с таблицей как обязательно используются поля DATETIME.


Дык, сделай, страдалец, правильный кластерный индекс.

 CONSTRAINT [PK_I_STATISTICS_CALL_IN] UNIQUE CLUSTERED 
(
             [DATETIME]
           , [GLOBAL_ID] ASC
)


Вот этот "правильный" кластерный индекс.... нет слов....
26 ноя 13, 17:42    [15193352]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Azik23
Member

Откуда:
Сообщений: 11
alexeyvg
AlexeyMish
[DATETIME] [float] NULL,
Просто интересно - почему используется тип float вместо datetime?
Это же неудобно.


Вы знаете что физически из себя представляет тип DATETIME в любом языке?
26 ноя 13, 17:44    [15193366]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Azik23
Вы знаете что физически из себя представляет тип DATETIME в любом языке?

В любом языке не знаю, а базе MSSQL - это два целочисленных числа.
А что вы хотели сказать этим вопросом
26 ноя 13, 17:46    [15193386]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
Azik23
alexeyvg
пропущено...
Просто интересно - почему используется тип float вместо datetime?
Это же неудобно.


Вы знаете что физически из себя представляет тип DATETIME в любом языке?


прям-таки в любом?
26 ноя 13, 17:46    [15193393]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Azik23
Member

Откуда:
Сообщений: 11
Glory
Azik23
Вы знаете что физически из себя представляет тип DATETIME в любом языке?

В любом языке не знаю, а базе MSSQL - это два целочисленных числа.
А что вы хотели сказать этим вопросом


Этт те что до запятой и после? :)
26 ноя 13, 17:54    [15193489]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Azik23
Этт те что до запятой и после? :)

Не то и не то.
Values with the datetime data type are stored internally by Microsoft SQL Server as two 4-byte integers. The first 4 bytes store the number of days before or after the base date, January 1, 1900. The base date is the system reference date. Values for datetime earlier than January 1, 1753, are not permitted. The other 4 bytes store the time of day represented as the number of milliseconds after midnight.
26 ноя 13, 17:56    [15193505]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Azik23
Member

Откуда:
Сообщений: 11
Glory
Azik23
Этт те что до запятой и после? :)

Не то и не то.
Values with the datetime data type are stored internally by Microsoft SQL Server as two 4-byte integers. The first 4 bytes store the number of days before or after the base date, January 1, 1900. The base date is the system reference date. Values for datetime earlier than January 1, 1753, are not permitted. The other 4 bytes store the time of day represented as the number of milliseconds after midnight.


MS SQL я не трогал :) Вы правы, просто для меня datetime = float :)

PS
float [ (n) ]
Where n is the number of bits that are used to store the mantissa of the float number in scientific notation and, therefore, dictates the precision and storage size. If n is specified, it must be a value between 1 and 53. The default value of n is 53.
nvalue
Precision
Storage size
1-24 7 digits 4 bytes
25-53 15 digits 8 bytes
26 ноя 13, 18:02    [15193567]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Azik23
Вы правы, просто для меня datetime = float :)

И это неправильно
26 ноя 13, 18:07    [15193597]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Azik23
Member

Откуда:
Сообщений: 11
Glory, ок, договорились :)
26 ноя 13, 18:10    [15193616]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
AlexeyMish
Member

Откуда:
Сообщений: 71
Glory,

может это и неправильно, но к сожалению, как я писал выше в моей БД так и есть. Не моя вина, как я говорил выше - издержки переноса с firebird на MS SQL)
Хотя тренд можно закрывать, пока что использую хинт для индекса.
Позже запущу пересчет статистики и создам джоб.
Я понимаю, что профессионалом я не буду, но базовые вещи хочется понимать. Благодаря топику продвинулся в понимании, за что всем большое спасибо.
26 ноя 13, 20:12    [15194201]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Веrd
Member

Откуда: Лазаревское
Сообщений: 575
alexeyvg
Получается, сервер считает, что выгоднее сканировать, чем использовать индекс.

Обновить статистику уже предлагали?
26 ноя 13, 21:28    [15194526]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить