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

Откуда:
Сообщений: 105
В общем в хозяйстве появилось одна кривая прога, в БД которую использует эта прога, есть таблица, больше 100 млн записей, куча, все значения не уникальны, там есть три индекса, по столбцу 1+2, по столбцу 3 и 1+2+4. Толку от индексов 0, к примеру в столбце 3 когда делаем выборку вида select column3 from table where column3=MyValue, в плане индекс seek, но он возвращает миллион с + записей м думает минут 10, примерно также и с остальными столбцами, users негодуют, может кто подскажет что делать с такой таблицей.
P.S. Хотел разбить на секции но не знаю по какому столбцу это сделать, поля даты нет, а остальные столбцы varchar, кроме одного (File_ID).
11 дек 15, 10:12    [18544633]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Пятница, конкурс екстрасенсов

Вы бизнесс-логику вашей проги знаете ? Какие юниты хранит ета таблица ? Можно ли выделить уникальное сочетание полей ?
11 дек 15, 10:20    [18544693]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
dark_DBa_dmin
Member

Откуда:
Сообщений: 105
Maxx
Пятница, конкурс екстрасенсов

Вы бизнесс-логику вашей проги знаете ? Какие юниты хранит ета таблица ? Можно ли выделить уникальное сочетание полей ?


Не знаю, и видимо не узнаю. По проги нет какой либо документации, а разрабы не знаю где, короче с ними не связаться. Column 1+2+3+4 вроде уникальны.
11 дек 15, 10:25    [18544727]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
dark_DBa_dmin
P.S. Хотел разбить на секции но не знаю по какому столбцу это сделать, поля даты нет, а остальные столбцы varchar, кроме одного (File_ID).
Что бы ещё всё замедлить?

dark_DBa_dmin
Толку от индексов 0, к примеру в столбце 3 когда делаем выборку вида select column3 from table where column3=MyValue, в плане индекс seek, но он возвращает миллион с + записей м думает минут 10, примерно также и с остальными столбцами
При чём тут индексы, секции и всё такое? Логика программы требует, что бы её передали миллион записей в ответ на тыкание кнопки пользователем.

Индекс это безобразие ускоряет, секции замедлят - но передача миллиона записей есть передача миллиона записей, быстро сделаться не может; по сути нужно разбираться с логикой, архитектурой программы, и с её реализацией (т.е. как напрограммировали как клиент, так и сервер).

Можно это делать как в целом (т.е. произвести рефакторинг всего комплекса), так и точечно, выискивая и устраняя узкие места в производительности. Устранять можно по разному - от создания индекса, индексированного представления и т.д., и до точечного изменения в архитектуре.

Но точечно - это не так, как вы задаёте вопрос (где у сервера кнопка "работать быстро"?), а трейсить цепочку от нажатия кнопки пользователем, до получения ответа на экране, искать долгие обработки, выяснять причину, устранять.
11 дек 15, 10:29    [18544747]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
dark_DBa_dmin
Maxx
Вы бизнесс-логику вашей проги знаете ? Какие юниты хранит ета таблица ? Можно ли выделить уникальное сочетание полей ?
Не знаю, и видимо не узнаю. По проги нет какой либо документации, а разрабы не знаю где, короче с ними не связаться.
При чём тут "проги"? Не узнаете вы только в том случае, если не хотите, или если это не нужно. А если нужно и хотите, то узнать всегда можно.
11 дек 15, 10:31    [18544752]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
В общем в хозяйстве
Guest
dark_DBa_dmin
Maxx
Пятница, конкурс екстрасенсов

Вы бизнесс-логику вашей проги знаете ? Какие юниты хранит ета таблица ? Можно ли выделить уникальное сочетание полей ?


Не знаю, и видимо не узнаю. По проги нет какой либо документации, а разрабы не знаю где, короче с ними не связаться. Column 1+2+3+4 вроде уникальны.

в смысле не можете оценить, миллион строк это много/мало, осмысленно/бессмысленно?
на миллион строк предлагается глазами пользователям смотреть? проблема наиболее вероятно здесь.
11 дек 15, 10:36    [18544774]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
dark_DBa_dmin
Maxx
Пятница, конкурс екстрасенсов

Вы бизнесс-логику вашей проги знаете ? Какие юниты хранит ета таблица ? Можно ли выделить уникальное сочетание полей ?


Не знаю, и видимо не узнаю. По проги нет какой либо документации, а разрабы не знаю где, короче с ними не связаться. Column 1+2+3+4 вроде уникальны.

ну тогда ой, я свой хрустальный шар отдал на полировку,сорри
11 дек 15, 10:36    [18544778]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
alexeyvg
dark_DBa_dmin
Не знаю, и видимо не узнаю. По проги нет какой либо документации, а разрабы не знаю где, короче с ними не связаться.
При чём тут "проги"? Не узнаете вы только в том случае, если не хотите, или если это не нужно. А если нужно и хотите, то узнать всегда можно.
Ещё есть вариант, что и исходников нет. Ну тогда либо выходить на разработчиков, либо заказать программу заново.
11 дек 15, 10:37    [18544782]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4981
alexeyvg
Ещё есть вариант, что и исходников нет. Ну тогда либо выходить на разработчиков, либо заказать программу заново.

Либо дизассемблировать)
11 дек 15, 11:36    [18545111]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
вы бы спросили users, что им для работы прямо так дофига миллионов записей надо зараз или можно найти какие-нибудь дополнительные фильтрующие условия.
11 дек 15, 12:31    [18545622]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Maxx
dark_DBa_dmin
пропущено...


Не знаю, и видимо не узнаю. По проги нет какой либо документации, а разрабы не знаю где, короче с ними не связаться. Column 1+2+3+4 вроде уникальны.

ну тогда ой, я свой хрустальный шар отдал на полировку,сорри


оба
11 дек 15, 13:51    [18546268]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
o-o
Guest
Winnipuh
Maxx
пропущено...

ну тогда ой, я свой хрустальный шар отдал на полировку,сорри


оба

+ не совсем хрустальные, зато новогодние

Картинка с другого сайта.
11 дек 15, 14:09    [18546455]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
Mairos
Member

Откуда:
Сообщений: 555
Winnipuh, когда я начинал изучать программирование и SQL в 90-е, то задал вопрос - "А как быть если пользователь хочет получить в сетку просмотра клиентской части "лям" записей по запросу?". Мой тогдашний наставник сказал - "Надо так объяснить ситуацию пользователю, чтобы он понял, что это его желание - идиотизм полный"
11 дек 15, 14:32    [18546612]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4831
dark_DBa_dmin
может кто подскажет что делать с такой таблицей.
P.S. Хотел разбить на секции но не знаю по какому столбцу это сделать, поля даты нет, а остальные столбцы varchar, кроме одного (File_ID).


Что делать с этой таблицей можете понять лишь вы сами.

1) Партиционирование зависит от а) того, как происходит вставка б) какие запросы идет к таблице
2) Дату вы можете добавить сами ALTER TABLE ADD DT NOT NULL DEFAULT GETDATE()
3) Судя по всему ваша таблица, какой-то лог -- может её просто порезать на части (на две таблицы, или по годам), старые вообще сделать readonly
4) Ну и наконец можно подумать про Columnstore Index, а может про FTS -- вам должно быть видней
11 дек 15, 14:43    [18546709]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4831
Mairos
Winnipuh, когда я начинал изучать программирование и SQL в 90-е, то задал вопрос - "А как быть если пользователь хочет получить в сетку просмотра клиентской части "лям" записей по запросу?". Мой тогдашний наставник сказал - "Надо так объяснить ситуацию пользователю, чтобы он понял, что это его желание - идиотизм полный"


Может возникнуть встречный вопрос, если желание пользователя -- идиотизм полный -- то, зачем тогда нужны программисты?
11 дек 15, 14:45    [18546729]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
Mairos
Member

Откуда:
Сообщений: 555
dark_DBa_dmin, попробуйте через group by + count определить уникальное сочетание. И сделайте первичный ключ, понимаю, что 100 млн это много, но попытка не пытка, как говорил товарищ Берия. ))
11 дек 15, 14:47    [18546742]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
a_voronin
Может возникнуть встречный вопрос, если желание пользователя -- идиотизм полный -- то, зачем тогда нужны программисты?

ессно зачем - чтоб релизить код
11 дек 15, 14:47    [18546746]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
Mairos
Member

Откуда:
Сообщений: 555
Maxx, ну уж явно не для удовлетворения ЛЮБЫХ желаний пользователя. Когда-то мне одна дама из бухгалтерии сказала, узнав, что надо в базу заносить данные - "Ой! Да тут столько делать всего надо! Я думала, что можно просто нажать кнопку и мне она(286-я писишка) всё сама посчитает". )) Даа.. надо дать возможность пользователю делать ВСЁ, что ему хочется, а потом слушать его вопли - "А чего так долго?" или "А я думал, что будет ФСЁНЕТАК!!" и т.п. ))
11 дек 15, 15:07    [18546912]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
Maxx
Member [скрыт]

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

да я вроде в курсе пятницо ведь
11 дек 15, 15:11    [18546948]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Воспользуюсь тем, что ТС свалил и задам свой вопрос:
Ситуация похожая, есть таблицы вида T_IVF_2015_001, где 2015 - номер года, 001 - номер продукта. Туда заливаются данные о реализованных продуктах по годам. В среднем в каждой таблице 100М записей. Заливает их кривая прога из логов кассовых аппаратов, и посему случаются повторения (вместо 1 записи вставит 2,3,4 одинаковые, таких записей примерно 3%). На таблице НЕТ первичного ключа, есть только кластерный индекс по номеру изделия и обычный индекс по номеру партии. Она собственно и нужна чтобы выяснить номер партии, по которой прошёл продукт, других полезных данных там нет.

Для отчётов нужно, к примеру, найти всех, кто получил продукцию выпущенную Васей с января по март 2015 года.
Беру номера изделий, которые делал Вася и хочу найти в этих таблицах партии, куда попала это продукция. Ну и всё, на этом прогресс заканчивается, ибо пятница, короткий день, и очень всё долго.

+ курсор

        SET @sql_command = N''
        SET @sql_command = @sql_command + N'INSERT #T_IVF' + ' '
        SET @sql_command = @sql_command + N'SELECT IVF.vou_number, IVF.vou_fv, IVF.vrf_batch_id' + ' '
        SET @sql_command = @sql_command + N'FROM ' + (@db_name + @table_name) + ' IVF' + ' '
        SET @sql_command = @sql_command + N'JOIN reimbursement.dbo.T_VRF_voucher_redemption_form VRF' + ' '
        SET @sql_command = @sql_command + N'ON VRF.vrf_batch_id = IVF.vrf_batch_id' + ' '
        SET @sql_command = @sql_command + N'WHERE vou_number BETWEEN @first_vou_number AND @last_vou_number' + ' '
        SET @sql_command = @sql_command + N'AND ((@date_from IS NULL) OR (@date_from <= VRF.vrf_send_date))' + ' '
        SET @sql_command = @sql_command + N'AND ((@date_to IS NULL) OR (@date_to >= VRF.vrf_send_date))'


Что с этим делать, не понятно. Как ускорить процесс поиска Васи?
11 дек 15, 16:26    [18547517]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
Mairos
Member

Откуда:
Сообщений: 555
Шыфл, честно говоря, не совсем понял вашу проблему (( ПятницО, однако.. Если трудности создают дубликаты - убейте их
к ядрене-фене. )) Постройте индекс по уникальным, теперь уже, сочетаниям и фсё..
11 дек 15, 16:36    [18547592]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
Mairos
Шыфл, честно говоря, не совсем понял вашу проблему (( ПятницО, однако.. Если трудности создают дубликаты - убейте их
к ядрене-фене. )) Постройте индекс по уникальным, теперь уже, сочетаниям и фсё..
Проблема у Шыфл в том, что данные хранятся в куче таблиц, не только в неуникальности.

Шыфл
Что с этим делать, не понятно. Как ускорить процесс поиска Васи?

Ну да, нужно делать курсор по таблицам, при такой структуре.

Можно ещё сливать данные в общую таблицу, то есть сделать отдельную надстройку для анализа.
Можно сделать индексированное представление.
Можно сделать удаление дубликатов, например, опцией индекса IGNORE_DUP_KEY либо триггером INSTEAD OF и построить уникальные индексы, с которыми будет быстрее.
Ещё можно эту поделку переделать в нормальный вид, но, как я понимаю, это покупной продукт? Хотя это самый правильный путь, остальные просаживают производительность, и вообще - костыли.

В общем, есть пути решения...
11 дек 15, 17:25    [18547832]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8570
Плохую архитектуру хорошим кодом не исправишь.
11 дек 15, 17:49    [18547972]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
dark_DBa_dmin
Member

Откуда:
Сообщений: 105
a_voronin
dark_DBa_dmin
может кто подскажет что делать с такой таблицей.
P.S. Хотел разбить на секции но не знаю по какому столбцу это сделать, поля даты нет, а остальные столбцы varchar, кроме одного (File_ID).


Что делать с этой таблицей можете понять лишь вы сами.

1) Партиционирование зависит от а) того, как происходит вставка б) какие запросы идет к таблице
2) Дату вы можете добавить сами ALTER TABLE ADD DT NOT NULL DEFAULT GETDATE()
3) Судя по всему ваша таблица, какой-то лог -- может её просто порезать на части (на две таблицы, или по годам), старые вообще сделать readonly
4) Ну и наконец можно подумать про Columnstore Index, а может про FTS -- вам должно быть видней



1) Вставка обычный insert с перечислением значений, запросы как правило на выборку где в условии обычно два три столбца.
2) Возможно, такой вариант не рассматривал.
3) Да, это скорее лог, туда заносятся данные о загруженных файлах (ID_File, Doc_ID, Cod_Err, Discriotion, Namе и т.д.). Потом оттуда же берутся данные какие файлы были загружены, это уже смотрят users. Я и хочу разбить ее на части, но не знаю по какому признаку, к примеру File_Id не уникален, и как я понял видимо берется из диапазона, так как повторяется довольно часто (с учетом кол-ва записей в таблице), хотя загрузка была нового файла, а id присвоился который использовался пару десятков тысяч записей назад.
4) Colunstore не вариант, sql 2008.

И отвечая на вопросы выше, не исходников, не мануалов, ничего нету, просто надо еще какое то время поддерживать работоспособность этой проги пока не внедрят новую. По сути пришли, сказали, вот прога, вот БД, чет тормозит, исправь, все.
За день вроде разобрался, обычно пользователи ставят фильты по одному из 4 полей, или по нескольким из них, создал один составной индекс из 4 столбцов, запрос с 2 минут выполняется теперь в районе секунды. В некоторых запросах по этим столбцам идет join и по прежнему выполняется оч. долго (вторая таблица индексирована по ключу), быстрее в раз 10 но все ровно долго.
11 дек 15, 18:37    [18548257]     Ответить | Цитировать Сообщить модератору
 Re: Что делать с таблицей с 100 млн. записей полной неуникальных значений.  [new]
dark_DBa_dmin
Member

Откуда:
Сообщений: 105
Владислав Колосов
Плохую архитектуру хорошим кодом не исправишь.


Скорее как раз это мой случай. Сейчас смотрю в таблицах полно индексов типа Column1+Column2, Column2+Column1, Column1, Column1+2+3, Column2+3 и т.д. некоторые индексы по два раза встречаются.
11 дек 15, 18:39    [18548269]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить