Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
Int23
Guest
Доброе утро. Есть такой сценарий. Программа запускается и создаёт БД и инициализует данными. Затем программа работает весь день и к концу дня БД занимает не более 4 Гб. Делаем бэкап ей (на всяк случай) и на утро сценарий повторяется. Но вставки бывают частыми до 1000 строк в сек. Надо сдлеать так чтобы простой бый минимален. Сейчас сделал
1. Прописал индексы на те запросы которое отнимали много времени
2. Для БД прописан режим Simple
3. Создан RAM диск. БД и Журнал создаётся в нём
Сейчас самые долгоие запросы это вставка в таблицы. Потому что вставляются в кластерные индексы строки, проверяются внешние ссылки. Скажите что ещё настроить можно чтобы работало быстро?
20 сен 11, 10:41    [11303157]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Int23,

Вы для начала определитесь что должно быстрее работать вставка новых данных или выборка уже существующих?

если вставка, то все индексы и ключи долой
если выборка то смотреть чего не хватает при выборке в плане запроса

и что значит "простой был минимален"?

и вобще зачем нужна база если она существует один день? может просто в текстовые файлы писать явно быстрее будет.
20 сен 11, 10:46    [11303183]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Int23
Сейчас самые долгоие запросы это вставка в таблицы. Потому что вставляются в кластерные индексы строки, проверяются внешние ссылки.

Это вы откуда узнали ? Анализировали план ? Статистику чтений ?
20 сен 11, 10:47    [11303198]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
Int23
Guest
>>Вы для начала определитесь что должно быстрее работать вставка новых данных или выборка уже существующих?
К сожалению и то и то

>>и что значит "простой был минимален"?
Чтобы и вставка и выборка работали как можно быстрее

>>может просто в текстовые файлы писать явно быстрее будет.
Самому не хочется делать подобие языка запросов, выбирать за период и прочее
20 сен 11, 10:49    [11303218]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31958
Int23
Сейчас самые долгоие запросы это вставка в таблицы. Потому что вставляются в кластерные индексы строки, проверяются внешние ссылки. Скажите что ещё настроить можно чтобы работало быстро?

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

Вообще при использовании RAM диска и при таких маленьких объёмах вставка 1000 строк/сек вообще не должна ощущаться.
20 сен 11, 10:51    [11303245]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
Int23
Guest
>>Это вы откуда узнали ? Анализировали план ? Статистику чтений ?
Я в Профилере ставлю Duration>5 мсек. Несколько часов запросы не появляются. Потом начинали появлятся выборки. Я прописал индексы. Потом гораздо дольше не появлялись "долгие запросы". К концу дня начали появлятся запросы insert. Я просмотрел план запросов. И вижу что он ищет в кластерных индексах таблиц для которых внешние ключи есть и вставляет в кластерный индекс текущей таблицы
20 сен 11, 10:52    [11303250]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31958
alexeyvg
- вставлять в порядке кластерного индекса,
- или убрать кластерный индекс,
- сделать секционирование (если вставляется большими пакетами, которые можно выделить в секции)
- убрать констрейны, если уж так критично
- внимательно посмотреть на индексы - нет ли лишних
Ещё, собственно, можно оптимизировать саму вставку - вставлять данные пакетами, или использовать BULK, или обернуть группу insert-стейтментов в транзакцию.
20 сен 11, 10:54    [11303258]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
Int23
Guest
>>- вставлять в порядке кластерного индекса,
Кластерный индекс по ПК который ГУИД. Гуиды генерятся не последовательно а произвольно. Это сильно влияет на производительность?

>>- или убрать кластерный индекс,
Не могу
>>- сделать секционирование (если вставляется большими пакетами, которые можно выделить в секции)
А нельзя поподробнее об этом?
>>- убрать констрейны, если уж так критично
Только внешние ключи есть
>>- внимательно посмотреть на индексы - нет ли лишних
Лишних нет и недостоющих тоже не выводит

>>Вообще при использовании RAM диска и при таких маленьких объёмах вставка 1000 строк/сек вообще не должна ощущаться.
Да оно вроде не ощущается но думаю может есть ещё какие методы что и как подкрутить. Такой сценарий не совсем типичен для БД и поэтому врядле рассматривается при оптимизации "по умолчанию". А производительности в моём случае мало не бывает
20 сен 11, 10:57    [11303283]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
Int23
Guest
>>вставлять данные пакетами, или использовать BULK
Не получится. Данные приходят построчно от стороннего сервиса. И извлекаются построчно в отдельном потоке
20 сен 11, 11:00    [11303305]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Int23
>>- вставлять в порядке кластерного индекса,
Кластерный индекс по ПК который ГУИД. Гуиды генерятся не последовательно а произвольно. Это сильно влияет на производительность?

>>- или убрать кластерный индекс,
Не могу
>>- сделать секционирование (если вставляется большими пакетами, которые можно выделить в секции)
А нельзя поподробнее об этом?
>>- убрать констрейны, если уж так критично
Только внешние ключи есть
>>- внимательно посмотреть на индексы - нет ли лишних
Лишних нет и недостоющих тоже не выводит

>>Вообще при использовании RAM диска и при таких маленьких объёмах вставка 1000 строк/сек вообще не должна ощущаться.
Да оно вроде не ощущается но думаю может есть ещё какие методы что и как подкрутить. Такой сценарий не совсем типичен для БД и поэтому врядле рассматривается при оптимизации "по умолчанию". А производительности в моём случае мало не бывает


гуид первый враг производительности, пк сделать растущий

а почему нельзя убрать пк, религия?

констрейнты это в том числе и внешние ключи
20 сен 11, 11:01    [11303307]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
Int23
Guest
>>гуид первый враг производительности, пк сделать растущий
Ок. буду править.

>>а почему нельзя убрать пк, религия?
Поиск в отдельном потоке часто выбирается по ПК
20 сен 11, 11:04    [11303329]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Int23
>>а почему нельзя убрать пк, религия?
Поиск в отдельном потоке часто выбирается по ПК

Вы хотите оптимизировать и чтение и вставку записей одновременно ?
20 сен 11, 11:08    [11303384]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
Int23
Guest
>>Вы хотите оптимизировать и чтение и вставку записей одновременно ?
Да. Задача такая
20 сен 11, 11:09    [11303398]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
hpv
Member

Откуда:
Сообщений: 153
Int23
>>Вы хотите оптимизировать и чтение и вставку записей одновременно ?
Да. Задача такая


По моему, вы стреляете из пушки по воробьям.
Если у вас простые запросы на вставку и селект, и важна производительность, то лучше юзать что-нибудь типа SQLite.
20 сен 11, 11:12    [11303430]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
Int23
Guest
Я пробовал FireBird с БД в памяти. ТАк он работает гораздо медленее
20 сен 11, 11:15    [11303459]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
guest_2011
Guest
Автоприращение у базы правильно настроено?
Для новых БД по умолчанию, начиная с SQL 2005, приращение файла данных по 1 Мб, что очень мало.
20 сен 11, 11:22    [11303512]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Int23
>>гуид первый враг производительности, пк сделать растущий
Ок. буду править.

>>а почему нельзя убрать пк, религия?
Поиск в отдельном потоке часто выбирается по ПК


попробуйте snapshot для разделения чтения и записи

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

На сколько критично по времени появление новых данных доступными для чтения?

если есть какой то временной промежуток то есть смысл попробовать джобом перекидывать данные в другую таблицу оптимизированную именно для чтения, а из таблицы для записи убрать всё лишнее что снижает скорость вставки (ключи, индексы сделать пк автоинкрементным)
20 сен 11, 11:22    [11303517]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Int23
Я пробовал FireBird с БД в памяти. ТАк он работает гораздо медленее

Вполне возможно. Если база маленькая - то большинство данных будет жить в буферах, а на диск скидываться в фоне. А если вы у сервера память отнимаете, то происходит постоянное чтение-запись данных, и,хотя оно по сути сводится к копированию в той же памяти, ресурсы тем не менее ест.
20 сен 11, 11:26    [11303545]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
Int23
Guest
>>На сколько критично по времени появление новых данных доступными для чтения?
Очень критично. ТОлько один поток вставил в БД другой должен как можно быстрее про это узнать

>>если есть какой то временной промежуток то есть смысл попробовать джобом перекидывать данные в другую таблицу
ДУмаю будет такой промежуток. Буду джобом перекидывать
20 сен 11, 11:28    [11303564]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
hpv
Member

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

А Вы размер вашего файла БД сразу инициализируете, т.е. например устанавливаете ему 4гб (насчет файла лога тот же вопрос).

Просто если затрачивается больше времени после длительной вставки данных, м.б. идет процесс расширения файлов БД.
20 сен 11, 11:29    [11303571]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31958
Int23
>>- вставлять в порядке кластерного индекса,
Кластерный индекс по ПК который ГУИД. Гуиды генерятся не последовательно а произвольно. Это сильно влияет на производительность?
В разы, если не больше. Сделайте ПК некластерным.

Думаю, одного этого достаточно.
20 сен 11, 11:51    [11303796]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31958
guest_2011
Автоприращение у базы правильно настроено?
Для новых БД по умолчанию, начиная с SQL 2005, приращение файла данных по 1 Мб, что очень мало.
Да, согласен с hpv - нужно просто сделать размер базы под размер диска, без всяких приращений. Тут же диск маленький, база пересоздаётся.
20 сен 11, 11:54    [11303819]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
уж сколько раз твердили миру
Guest
Int23
Кластерный индекс по ПК который ГУИД.

какая популярная стенка для долбежки башкой.

всех с кластерными гуидами можно сразу в платную ветку направлять.
и с ms'ами договориться чтобы с сиквелом заинтегрировали:
запускает чувак CREATE INDEX, а его херак - на sql.ru выбрасывает.
"все еще создаете кластерные по гуидами?"..
20 сен 11, 12:18    [11304101]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31958
уж сколько раз твердили миру
Int23
Кластерный индекс по ПК который ГУИД.

какая популярная стенка для долбежки башкой.

всех с кластерными гуидами можно сразу в платную ветку направлять.
и с ms'ами договориться чтобы с сиквелом заинтегрировали:
запускает чувак CREATE INDEX, а его херак - на sql.ru выбрасывает.
"все еще создаете кластерные по гуидами?"..
Ну, иногда это нужно :-)

А при создании ПК на ГУИД-поле, по умолчанию создаётся некластерный индекс, так что какую то подсказку МС даёт...
20 сен 11, 12:25    [11304166]     Ответить | Цитировать Сообщить модератору
 Re: База данных размером до 4 Гб на 1день. Как оптимизировать?  [new]
Int23
Guest
Огромное спасибо за подсказки. Будем переделывать ГУИДы под ИНТы и сразу размер бд выставим побольше
20 сен 11, 12:34    [11304258]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить