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

Откуда:
Сообщений: 23
Добрый день, коллеги
Уже сьел до корней свои зубы, пытаясь разгрызть гранит этой проблемы, но тщетно
Сразу предупрежу - я Java программист, поэтому я не вполне уверен в глубине своих познаний SQL SERVER

А теперь опишу ситуацию:

Очень медленно происходят инсерты в базу. Проблема плавающая, но 2000 записей примерно за 10 минут - вполне реально

Конфигурация:
256гб рам, 60 логических ядер проц
размер БД 750 гб... Данные за 3 года, пользуемся только за последний год
размер temp_db 200гб - поделено на 20 файлов по 10 гигов.
Все файлы размещены на рейде 1 ТБ
База работает в режиме READ_COMMITED_SNAPSHOT

Что видно в Активити Мониторе: большие ожидания PAGEIOLATCH_EX и PAGEIOLATCH_SH на ту таблицу, куда вставляем

Индексы, насколько я вижу, все на месте.
Таблица, куда делаем инсерты - несколько сот миллионов строк. 5 индексов, кластерный индекс по дате. В качестве ключа - GUID.

Вставка происходит всегда в один поток.


Буду благодарен за любые идеи, куда можно смотреть, что щупать, какие варианты рассматривать..
31 мар 13, 19:49    [14119032]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
aleks2
Guest
>>Вставка происходит всегда в один поток.
А выборка?

1. Прильни к первоисточнику. Т.е. Microsoft.
2. 5 индексов - это тяжело. Удаление каждого из них даст уcкорение в ~30-40%. Нафега вам стока?
3. Далее не совсем понятно: вам РЕАЛЬНО вставку в ОСНОВНУЮ таблицу надо ускорить или только работу клиентского приложения?
4. Если только клиентского приложения - бери пример с лога ISA 2006. Там вставку ведут во временную таблицу и периодически переключаются на ДРУГУЮ таблицу, а содержимое старой копируют в основной журнал гопом.
1 апр 13, 08:11    [14119670]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
twister_mc
Очень медленно происходят инсерты в базу. Проблема плавающая, но 2000 записей примерно за 10 минут - вполне реально
Посмотрите в профайлере, что там реально делается. Может, приложение после вставки каждой записи читает всю таблицу?

2000 записей в 10 минут - это очень мало, независимо от индексов, структур и размера таблиц, конфигурации сервера и т.д.
1 апр 13, 09:31    [14119812]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
WarAnt
Member

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

Может у вас 5 рейд с 2 убитыми в нем дисками?:)
1 апр 13, 10:15    [14120017]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
twister_mc
В качестве ключа - GUID.
Какой филлфактор и когда последний раз ребилдили? А остальные индексы?
1 апр 13, 10:38    [14120134]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
WarAnt
Может у вас 5 рейд с 2 убитыми в нем дисками?:)

Гавриленко Сергей Алексеевич
Какой филлфактор и когда последний раз ребилдили? А остальные индексы?
ИМХО ограничение "одна запись в 15 секунд" не может этим объясняться, даже на одноядерном атоме с одним грин-диском было бы быстрее :-)
Нужно всё таки посмотреть профайлером.
1 апр 13, 10:51    [14120214]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
Гость333
Member

Откуда:
Сообщений: 3683
alexeyvg
ИМХО ограничение "одна запись в 15 секунд"

ТС говорит "2000 записей примерно за 10 минут" — это "три записи в секунду".
1 апр 13, 10:56    [14120242]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
Гость333
alexeyvg
ИМХО ограничение "одна запись в 15 секунд"

ТС говорит "2000 записей примерно за 10 минут" — это "три записи в секунду".
Ой, действительно, перепутал, посчитал как в 10 часов :-)

Но всё равно, не особо большая нагоузка: не ограничиваться приложением, посмотреть в профайлере, поделать вставки из SSMS. Так же посмотреть остальную нагрузку на сервере.
Посмотреть очереди и response time дисков.
1 апр 13, 11:01    [14120277]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4994
twister_mc
кластерный индекс по дате. В качестве ключа - GUID.

Это как? Скрипт создания таблицы можно?
1 апр 13, 11:17    [14120414]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
twister_mc,
По материалам заграничных СМИ =)

PAGEIOLATCH_EX
Occurs when a task is waiting on a latch for a buffer that is in an I/O request. The latch request is in Exclusive mode. Long waits may indicate problems with the disk subsystem.

PAGEIOLATCH_SH
Occurs when a task is waiting on a latch for a buffer that is in an I/O request. The latch request is in Shared mode. Long waits may indicate problems with the disk subsystem.
1 апр 13, 11:25    [14120480]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
2. 5 индексов - это тяжело. Удаление каждого из них даст уcкорение в ~30-40%. Нафега вам стока?

5 индексов — это фигня.
Дело в контеншене, блокировки.
1 апр 13, 11:42    [14120616]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
aleks2

1. Прильни к первоисточнику. Т.е. Microsoft.


Вообще одно это уже настолько феерично, что достойно занесения в анналы.
1 апр 13, 11:45    [14120631]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
автор
Конфигурация:
256гб рам, 60 логических ядер проц
размер БД 750 гб... Данные за 3 года, пользуемся только за последний год
размер temp_db 200гб - поделено на 20 файлов по 10 гигов.
Все файлы размещены на рейде 1 ТБ


Вообще - все ето попахивает 1 апреля
1 апр 13, 11:45    [14120636]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
Да может он туда запросами фильмы пишет или еще какие увесистые файлы.
А так

Как ранее просили:

Какой филлфактор и когда последний раз ребилдили? А остальные индексы?
Скрипт создания таблицы можно?
1 апр 13, 11:47    [14120652]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
alexeyvg
twister_mc
Очень медленно происходят инсерты в базу. Проблема плавающая, но 2000 записей примерно за 10 минут - вполне реально
Посмотрите в профайлере, что там реально делается. Может, приложение после вставки каждой записи читает всю таблицу?

2000 записей в 10 минут - это очень мало, независимо от индексов, структур и размера таблиц, конфигурации сервера и т.д.


Это не так и мало, 300 милисек на запись,
Если оно там что то еще делает в бд, то вполне себе нормальное время.
1 апр 13, 11:47    [14120653]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
Гость333
Member

Откуда:
Сообщений: 3683
twister_mc
2000 записей примерно за 10 минут - вполне реально

Кстати, по сколько записей за один раз вставляется?
1 апр 13, 11:57    [14120743]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
Гузы
Guest
Была похожая хрень для select - insert. После перехода на 2008 r2. На 2005 все работало, а на 2008 - стало невозможно дождаться завершения операции. Причем запрос к таблице где всего-то 0.5 ляма записей, а вставка в таблу ~ 10 тыс.
Помогли 2 вещи. Во-первых, что-то докрутили админы - так и не признались, что (на пустом серваке время от времени вылетала Нехватка памяти...) - стало, как на 2005. Во вторых, допилить запрос, результаты которого шли на вставку. В итоге время сократилось раза в 3 по сравнению с 2005.
М.б. и у Вас нечто похожее имеется.
1 апр 13, 15:33    [14122021]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
twister_mc
Member

Откуда:
Сообщений: 23
Гость333
twister_mc
2000 записей примерно за 10 минут - вполне реально

Кстати, по сколько записей за один раз вставляется?


от единиц до сотен тысяч. это массовые инсерты с серверов-нодов
1 апр 13, 15:33    [14122026]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
Crimean
Member

Откуда:
Сообщений: 13147
или там на каждуювставку логон / логоф или немеряно кода прячется в процах / триггерах и работает на каждую вставку или оба сразу. больше вариантов не вижу. да! еще база в авто-close может стоять :)
1 апр 13, 15:40    [14122079]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
twister_mc
Member

Откуда:
Сообщений: 23
angel_zar
Да может он туда запросами фильмы пишет или еще какие увесистые файлы.
А так

Как ранее просили:

Какой филлфактор и когда последний раз ребилдили? А остальные индексы?
Скрипт создания таблицы можно?


Ребилдили на днях, безуспешно, перфоманс не изменился

CREATE TABLE [dbo].[UserEventAttribute](
[name] [nvarchar](255) NOT NULL,
[event_id] [uniqueidentifier] NOT NULL,
[type] [nvarchar](255) SPARSE NULL,
[valueDate] [datetime] SPARSE NULL,
[valueGuid] [uniqueidentifier] SPARSE NULL,
[valueNumber] [numeric](19, 9) NULL,
[valueString] [nvarchar](2000) SPARSE NULL,
PRIMARY KEY NONCLUSTERED
(
[name] ASC,
[event_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]


CREATE NONCLUSTERED INDEX [UserEventAttribute_event] ON [dbo].[UserEventAttribute]
(
[event_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO


Это единственная таблица у которой отсутствует кластерный индекс по дате.


Я гляжу в Монитор - оно при инсерте делает загрузку данных с диска по этой таблице. Зачем?!
1 апр 13, 15:42    [14122099]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1972
Была аналогичная проблема со вставкой в таблицу.
360К записей вставлялись в изначально пустую таблицу 7-8 часов, при этом чем дальше в лес - тем медленнее вставка.
Убил кластерный (он же - единственный) индекс в таблице - вставка этих же 360К записей стала занимать 7-8 минут.

SQL Server 2008 R2
1 апр 13, 15:47    [14122128]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
twister_mc
Ребилдили на днях, безуспешно, перфоманс не изменился
С каким fillfactor?
1 апр 13, 16:14    [14122382]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
twister_mc
Я гляжу в Монитор - оно при инсерте делает загрузку данных с диска по этой таблице. Зачем?!
Чтобы вставить что-то в станицу данных, эту страницу надо сначала прочитать с диска.
1 апр 13, 16:16    [14122395]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
Grigory Krasnopolskiy
Member

Откуда: Зеленоград
Сообщений: 15
twister_mc
...
Таблица, куда делаем инсерты - несколько сот миллионов строк. 5 индексов, кластерный индекс по дате. В качестве ключа - GUID.
Вставка происходит всегда в один поток.
...


Вставка как делается по 1 записи или балком?
По одной записи несколько млн будет очень долго.
Не знаю как в джаве, а в шарпе поможет SqlBulkCopy.
А если ключ по гуиду кластерный, то это хорошие тормоза, т.к. при любой вставке делается перестройка кластерного индекса и физическое перемещение данных. как минимум сделать его некластерным.
1 апр 13, 16:24    [14122442]     Ответить | Цитировать Сообщить модератору
 Re: Очень-очень медленные insert  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Grigory Krasnopolskiy
А если ключ по гуиду кластерный, то это хорошие тормоза, т.к. при любой вставке делается перестройка кластерного индекса и физическое перемещение данных. как минимум сделать его некластерным.
Не при любой вставке. И перевод некластерного индекса в кластерный не избавит от сплитов, если страницы индекса заполнены полностью.

Именно поэтому я в третий раз спрашиваю - какой у индексов филлфактор?
1 апр 13, 16:32    [14122501]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить