Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Время добавления записей  [new]
Geo
Member

Откуда:
Сообщений: 6883
Даже не знаю, как лучше назвать топик, ну пусть будет так.

Подскажите, кто может. Скорее всего, так будет быстрее, чем я сам найду причину.

Есть таблица из буквально пары-тройки полей, без триггеров.
Открываю коннекшен и добавляю в базу записи блоками вида:
begin tran
insert into myTable (field1, field2, field3) values (1, 2, 3)
insert into myTable (field1, field2, field3) values (4, 5, 6)
insert into myTable (field1, field2, field3) values (7, 8, 9)
...
insert into myTable (field1, field2, field3) values (i, j, k)
commit tran

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

Сейчас случайно обнаружил, что после перезагрузки сервера записи продолжают добавляться с исходной скоростью. Я думал, что оно просто индексирует чем дальше, тем дольше, но оказывается, можно время от времени что-то делать, чтобы реанимировать скорость. Стало быть, что? Фамилию сказать или может коннекшен переоткрывать? Навскидку не скажете?
13 окт 15, 20:26    [18274702]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Автоэкспанд файлов? Cкрипт таблицы?
13 окт 15, 20:44    [18274739]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Geo
Member

Откуда:
Сообщений: 6883
Гавриленко Сергей Алексеевич,
Что, простите?
13 окт 15, 20:50    [18274747]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
Geo
может коннекшен переоткрывать?
Попробуйте переоткрывать, что то проскакивало подобное.
13 окт 15, 21:20    [18274852]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Geo
Даже не знаю, как лучше назвать топик, ну пусть будет так.

Подскажите, кто может. Скорее всего, так будет быстрее, чем я сам найду причину.

Есть таблица из буквально пары-тройки полей, без триггеров.
Открываю коннекшен и добавляю в базу записи блоками вида:
begin tran
insert into myTable (field1, field2, field3) values (1, 2, 3)
insert into myTable (field1, field2, field3) values (4, 5, 6)
insert into myTable (field1, field2, field3) values (7, 8, 9)
...
insert into myTable (field1, field2, field3) values (i, j, k)
commit tran

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

Сейчас случайно обнаружил, что после перезагрузки сервера записи продолжают добавляться с исходной скоростью. Я думал, что оно просто индексирует чем дальше, тем дольше, но оказывается, можно время от времени что-то делать, чтобы реанимировать скорость. Стало быть, что? Фамилию сказать или может коннекшен переоткрывать? Навскидку не скажете?


когда начнет тормозить выполните этот запрос, что он вам выведет?

select
	name,
	[type],
	buckets_count,
	buckets_in_use_count,
	buckets_max_length,
	buckets_max_length_ever,
        avg_length,
	buckets_avg_scan_hit_length,
	buckets_avg_scan_miss_length,
	hits_count,
	misses_count
from 
	sys.dm_os_memory_cache_hash_tables t
where
	t.[type] = 'CACHESTORE_SQLCP'


результаты покажите потом...

а вместо перезагрузки попробуйте

DBCC FREEPROCCACHE
13 окт 15, 22:09    [18274977]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
churupaha

DBCC FREEPROCCACHE


dbcc freesystemcache('SQL Plans')
13 окт 15, 22:27    [18275042]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Geo
Member

Откуда:
Сообщений: 6883
churupaha
...
результаты покажите потом...

а вместо перезагрузки попробуйте
...
Спасибо. Через недельку буду повторять процедуру, попробую, доложу
13 окт 15, 23:28    [18275292]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
Geo
churupaha
...
результаты покажите потом...

а вместо перезагрузки попробуйте
...
Спасибо. Через недельку буду повторять процедуру, попробую, доложу
Зачем весь план терять? Попробуйте для начала коннект переоткрыть.
13 окт 15, 23:46    [18275336]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Geo
Гавриленко Сергей Алексеевич,
Что, простите?
Ладно, я понимаю, что в первой фразе можно было не угадать вопрос про настройки автоматического прироста файлов базы. Но что не понятного в просьбе показать скрипт "таблицы из буквально пары-тройки полей"?..

Сообщение было отредактировано: 14 окт 15, 02:03
14 окт 15, 02:02    [18275535]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Geo
Member

Откуда:
Сообщений: 6883
Гавриленко Сергей Алексеевич

Автоэкспанд файлов?

Был 1 Мб, попробовал 512 Мб. Разницы нет. 100 млн записей занимают порядка 3 Гб
Гавриленко Сергей Алексеевич

Cкрипт таблицы?

CREATE TABLE [dbo].[myTable](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[field1] [tinyint] NOT NULL,
	[field2] [real] NULL,
	[field3] [real] NULL,
 CONSTRAINT [PK_myTable] PRIMARY KEY CLUSTERED 
(
	[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]

GO

ALTER TABLE [dbo].[mytable2]  WITH CHECK ADD  CONSTRAINT [FK_mytable2] FOREIGN KEY([field1])
REFERENCES [dbo].[mytable2] ([id])
GO


alexeyvg
Geo
может коннекшен переоткрывать?
Попробуйте переоткрывать, что то проскакивало подобное.
Попробовал. Безрезультатно. А рестарт сервера действительно помогает. В принципе, это тоже решение, хотя и не самое удобное. Сервером пользуюсь только я, и в крайнем случае могу и этим обойтись.

churupaha
а вместо перезагрузки попробуйте

Попробовал - разницы не вижу

churupaha
когда начнет тормозить выполните этот запрос, что он вам выведет?

Попробовал примерно на полдороге:
select
	name,
	[type],
	buckets_count,
	buckets_in_use_count,
	buckets_max_length,
	buckets_max_length_ever,
    --   avg_length,
	buckets_avg_scan_hit_length,
	buckets_avg_scan_miss_length,
	hits_count,
	misses_count
from 
	sys.dm_os_memory_cache_hash_tables t
where
	t.[type] = 'CACHESTORE_SQLCP'

nametypebuckets_countbuckets_in_use_countbuckets_max_lengthbuckets_max_length_ever buckets_avg_scan_hit_length buckets_avg_scan_miss_length hits_count misses_count
SQL Plans CACHESTORE_SQLCP 40009 8 1 2 0 0 9467733 50
17 окт 15, 23:24    [18292586]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
В схеме криминала нет. (Он есть в способе вставки -- 100 лямов все-таки лучше вставлять балком).
С файлами: сделайте их по 3-5 Гб, в т.ч. и лог, чтобы исключить влияние автоприроста на результат. Кстати, recovery model для базы какая?

З.Ы. @@version покажите.
17 окт 15, 23:53    [18292626]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Geo
Member

Откуда:
Сообщений: 6883
Гавриленко Сергей Алексеевич
В схеме криминала нет. (Он есть в способе вставки -- 100 лямов все-таки лучше вставлять балком).
Можно конечно, но совсем не хочется. Гораздо проще перезапускать сервер, чем переделывать способ вставки.
Гавриленко Сергей Алексеевич
Кстати, recovery model для базы какая?
Simple
Гавриленко Сергей Алексеевич
З.Ы. @@version покажите.
Microsoft SQL Server 2014 - 12.0.4100.1 (X64)
Apr 20 2015 17:29:27
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
18 окт 15, 00:48    [18292724]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
Geo,
попробуйте

exec sp_configure 'optimize for ad hoc workloads', '1'
go
reconfigure
go


перед загрузкой и '0' после загрузки.
Хотя Вы должны понимать, что примененный способ добавления записей очень плох, сиквел "не любит" спам команд.
18 окт 15, 13:35    [18293406]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Geo
Member

Откуда:
Сообщений: 6883
Владислав Колосов
Geo,
попробуйте

exec sp_configure 'optimize for ad hoc workloads', '1'
go
reconfigure
go


перед загрузкой и '0' после загрузки.
Хотя Вы должны понимать, что примененный способ добавления записей очень плох, сиквел "не любит" спам команд.

Не влияет или влияет незаметно. Ну что ж, пожалуй, действительно переделаю на балк инсерт, раз вы в один голос твердите, что так будет лучше.
18 окт 15, 14:37    [18293550]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Geo
Member

Откуда:
Сообщений: 6883
Докладываю. Переделал вставку на SqlBulkCopy. Добавляю блоками по 20-30'000 записей. Начальная скорость выросла примерно на треть. Прирост длительности добавления в процессе никуда не делся. И всё так же исходную скорость можно восстановить, перезагрузив службу сервера. Что еще можно попробовать?..
19 окт 15, 19:37    [18299371]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А как вы замеряете скорость?
19 окт 15, 20:36    [18299575]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Geo
Member

Откуда:
Сообщений: 6883
каждые примерно 100к записей, смотрю сколько прошло времени на их добавление
19 окт 15, 20:38    [18299581]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
бульдозерист краешкоровняльщик
Guest
Geo,

не пишется ли параллельно куда-нибудь какой-нибудь лог в духе "я добавил эту строку ........ успешно в 20:50:37.123 19.10.2015"?
и как это все запускается? батник/студия/специально написанный exe?
19 окт 15, 20:54    [18299626]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Geo
Member

Откуда:
Сообщений: 6883
бульдозерист краешкоровняльщик
Geo,

не пишется ли параллельно куда-нибудь какой-нибудь лог в духе "я добавил эту строку ........ успешно в 20:50:37.123 19.10.2015"?
и как это все запускается? батник/студия/специально написанный exe?

Специально записанный exe. Лог не пишется, но оно в принципе мне и не надо. Измерения, как я уже говорил, проводятся достаточно редко, оказывается, даже раз в 200к записей. И скорость падает очень заметно. На порядок в течение работы.
Перезапуск екзешника, если вы это имеете в виду, ничего не меняет. Да там и нечего менять, он довольно простой, никаких утечек в ём нету. А вот перезапуск сиквела влияет на ситуацию описанным образом, кардинально.
Загрузка процессора у сиквела очень маленькая, 5-10%. Винта тоже. Он потихоньку отжирает память и закукливается.
19 окт 15, 20:59    [18299639]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
бормашинист крошкошвыряльщик
Guest
Geo,

а как этот exe делает bulk?

автор
Сервером пользуюсь только я

виртуалка на обычном компе?
19 окт 15, 21:36    [18299749]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Geo
Member

Откуда:
Сообщений: 6883
бормашинист крошкошвыряльщик
Geo,

а как этот exe делает bulk?

автор
Сервером пользуюсь только я

виртуалка на обычном компе?
Екзешник в виртуалке. Сервер на самом компьютере, без виртуалок
19 окт 15, 21:40    [18299758]     Ответить | Цитировать Сообщить модератору
 Re: Время добавления записей  [new]
Geo
Member

Откуда:
Сообщений: 6883
>> Екзешник в виртуалке. Сервер на самом компьютере, без виртуалок
Впрочем, exe тоже запускаю вне виртуалок, то ситуация не меняется
19 окт 15, 21:41    [18299760]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить