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

Откуда:
Сообщений: 122
здравствуйте!
Работает программа, которая пишет ч-з ADO на mssql2005 данные со скоростью примерно 15 тыс строк в сек.
При этом программы использует хранимую процедуру с большим количеством параметров (200).
В непонятно какой момент происходит падение производительности в 2.5 раза.
Производительность падает надолго - иногда она восстанавливается спустя несколько часов, иногда нет.
checkpoint-ы вроде не влияют..
Но при переходе на новую таблицу при переходе на новую таблицу восстанавливается всегда.
При при перезапуске программы - производительность тоже восстанавливается.
Вопрос: в чём тут может быть дело?
PS. Есть подозрение, что это безобразие может быть связано с длительными запросами пользователей (только на чтение!).
13 июн 13, 16:04    [14429337]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
Glory
Member

Откуда:
Сообщений: 104760
vv40in
В непонятно какой момент происходит падение производительности в 2.5 раза.

Что вы измеряете, когда говорите "производительность падает" ?
13 июн 13, 16:07    [14429355]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
vv40in
Member

Откуда:
Сообщений: 122
Glory,
кол-во строк, записанных в базу в единицу времени. Или байт - примерно так же.
13 июн 13, 16:28    [14429561]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
vv40in
PS. Есть подозрение, что это безобразие может быть связано с длительными запросами пользователей (только на чтение!).

А чтение блокирует таблицу ? Может быть просто одновременно пишутся данные и вы встаете в очередь на запись?

CREATE PROCEDURE [dbo].[BLK]
@baseid int = 0
AS
BEGIN


select distinct
	er.blocking_session_id as [SPID КТО], 
	es.session_id as [SPID КОГО],
	Cast(Round(er.wait_time*1.0/1000.0/60.0,2) as money) as [wait_time КОГО min.],
	Cast(Round(er2.wait_time*1.0/1000.0/60.0,2) as money) as [wait_time КТО min.],
	(es2.login_name + ' (' + es2.host_name + '; ' + er2.status + ')') as [КТО],
	(es.login_name + ' (' + es.host_name + '; ' + er.status + ')') as [КОГО],
	Cast(csql.text as varchar(max)) as [sql КОГО],
	Cast(csql2.text as varchar(max)) as [sql КТО],
	er2.Command as [Command КТО],
	er.Command as [Command КОГО],
	er.database_id,
	er2.wait_resource as [resource КТО],
	er.wait_resource as [resource КОГО]
from
	sys.dm_exec_sessions es
	inner join sys.dm_exec_requests er on es.session_id = er.session_id 
	CROSS APPLY sys.fn_get_sql (er.[sql_handle]) as csql
	
	inner join sys.dm_exec_sessions es2 on es2.session_id = er.blocking_session_id
	inner join sys.dm_exec_requests er2 on er2.session_id = er.blocking_session_id 
	CROSS APPLY sys.fn_get_sql (er2.[sql_handle]) as csql2
order by
	Cast(Round(er.wait_time*1.0/1000.0/60.0,2) as money) DESC

RETURN
END

Попробуйте создать такую штуку и запускайте в тот момент, когда возникают "тормоза".
13 июн 13, 16:44    [14429652]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34005
Блог
vv40in,

без подробностей - это все гадание на кофейной гуще

предположим вы делаете так
Insert into t1 
select a,b,c
where a not exists ( t1 )


причем индексов нет, и памяти мало
13 июн 13, 17:05    [14429785]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
vv40in
Member

Откуда:
Сообщений: 122
всем спасибо.
производительность повышается после выполнения:
DBCC DROPCLEANBUFFERS


НО! остается основная загадка:
почему помогает перезапуск программы???
может, у connection тоже есть какие-то внутренние буферА?
(при этом утечек памяти нет)
мож. это глюк ADO?
13 июн 13, 19:27    [14430390]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
vv40in
Member

Откуда:
Сообщений: 122
Сергей Викт.,
ничто программу не блокирует.
но command.Execute выполняется в 2.5 раза дольше.
видимо, это связано с тем, что память таблицы (и ее индексов), в которыю программа сейчас пишет, была вытеснена другими таблицами.
13 июн 13, 19:38    [14430424]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
vv40in
Member

Откуда:
Сообщений: 122
vv40in
НО! остается основная загадка:
почему помогает перезапуск программы???
может, у connection тоже есть какие-то внутренние буферА?
(при этом утечек памяти нет)
мож. это глюк ADO?


есть идеи?

заметил еще такое.
дело в том,что программа пишет в таблицу параллельными потоками
(кстати, падение производительности происходит и при одном потоке).
Так вот.. бывает, что производительность одного из потоков выше в 2.5 раза, чем у остальных!

Вот так...
14 июн 13, 13:40    [14433553]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
Glory
Member

Откуда:
Сообщений: 104760
vv40in
Glory,
кол-во строк, записанных в базу в единицу времени. Или байт - примерно так же.

Т.е. взяли в руки секундомер и стали считать число байт, записываемых в базу ?
14 июн 13, 13:44    [14433594]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
vv40in
Member

Откуда:
Сообщений: 122
Glory
vv40in
Glory,
кол-во строк, записанных в базу в единицу времени. Или байт - примерно так же.

Т.е. взяли в руки секундомер и стали считать число байт, записываемых в базу ?
что за.. для этого есть программнае средства
14 июн 13, 13:53    [14433668]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
Glory
Member

Откуда:
Сообщений: 104760
vv40in
что за.. для этого есть программнае средства

да что вы говорите ?
И вы приведете цифры из этих "программных средств" ?
14 июн 13, 13:54    [14433677]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
vv40in
Member

Откуда:
Сообщений: 122
Glory,
не думал, что это интересно.

m_nMsgs_ForAMinute - сколько сообщений записано за минуту


u32 nDbTime = GetTickCount();
m_Cmd.Execute(...);
m_nDbTime_ForAMinute += GetTickCount() - nDbTime;

и каждую минуту вывожу такое:
double a = 1.0* m_nDbTime_ForAMinute / m_nMsgs_ForAMinute;


точность тут не нужнА. в чём измеряется? да хоть в попугаях... Нужно отношение..

одно число: 0.226077
другое: 0.696939

и нельзя ли без сарказма и не отнимать время пустыми вопросами?
14 июн 13, 14:07    [14433787]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
Glory
Member

Откуда:
Сообщений: 104760
vv40in
m_nMsgs_ForAMinute - сколько сообщений записано за минуту

Нет. Это сколько раз выполнился ваш клиентский код.


vv40in
и нельзя ли без сарказма и не отнимать время пустыми вопросами?

А нельзя ли без голословных "выводов" про снижение в 2.5 раза производительности записи ? Вы даже не отличаете клиентский код от серверного.
Сколько времени выполняется "хранимая процедура с большим количеством параметров (200)." ?
Сколько времени выполняется каждая команда в ней ?
Как вы проверяете "ничто программу не блокирует." ?
14 июн 13, 14:14    [14433857]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
vv40in
Member

Откуда:
Сообщений: 122
Glory
vv40in
m_nMsgs_ForAMinute - сколько сообщений записано за минуту

Нет. Это сколько раз выполнился ваш клиентский код.

1)прочтите внимательнее

Glory
vv40in
и нельзя ли без сарказма и не отнимать время пустыми вопросами?

А нельзя ли без голословных "выводов" про снижение в 2.5 раза производительности записи ? Вы даже не отличаете клиентский код от серверного.
Сколько времени выполняется "хранимая процедура с большим количеством параметров (200)." ?
Сколько времени выполняется каждая команда в ней ?
Как вы проверяете "ничто программу не блокирует." ?

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

3) я не задавал вопрос: серверный это код или нет.
Вопрос звучал иначе. читайте внимательнее
14 июн 13, 14:29    [14433995]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
Glory
Member

Откуда:
Сообщений: 104760
vv40in
1)прочтите внимательнее

u32 nDbTime = GetTickCount();
m_Cmd.Execute(...);
m_nDbTime_ForAMinute += GetTickCount() - nDbTime;

Это ваш _клиентский_ код.
Вы измеряете своим рукописным кодом, сколько раз выполняется ваша команда m_Cmd.Execute(...)
Причем тут "производительность записи " - непонятно

vv40in
2) программу ничто не блокирует, т.к. к серверу в данный момент была подсоединена только эта программа. Да, утречком таблицу читала другая программа, но теперь она не подсоединена.

Это вы опять каким-то своим рукописным кодом проверили ?

vv40in
Вопрос звучал иначе. читайте внимательнее

Ответ - используйте программные средства, которые измеряют то, что происходит на сервере.
14 июн 13, 14:35    [14434045]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
vv40in
Member

Откуда:
Сообщений: 122
Glory,
выше Сергей Викт. привел пример процедуры, которую можно использовать для проверки блокировки. я ее использовал.
использовал sp_who2.

и я действительно проверяю производительность выполнения cmd.execute.
Что еще остается в клиентском коде?
Это тоже показатель.
14 июн 13, 14:44    [14434120]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
Glory
Member

Откуда:
Сообщений: 104760
vv40in
ее использовал.
использовал sp_who2.

И что вы увидели в результатах ?

vv40in
Что еще остается в клиентском коде?
Это тоже показатель.

Это показатель вашего кода. К которому сервер ни имеет отношения
14 июн 13, 14:46    [14434147]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
vv40in
Member

Откуда:
Сообщений: 122
Glory
vv40in
выше Сергей Викт. привел пример процедуры, которую можно использовать для проверки блокировки. я ее использовал
использовал sp_who2.

И что вы увидели в результатах ?

ничто не блокирует мою программу. и ничего постороннего не запущено..
Glory
vv40in
Что еще остается в клиентском коде?
Это тоже показатель.

Это показатель вашего кода. К которому сервер ни имеет отношения

ну а как получить показатели производительности серверного кода?
14 июн 13, 15:16    [14434336]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
Glory
Member

Откуда:
Сообщений: 104760
SQL Profiler даст показатели времени и использования ресурсов для каждого запроса
Счетчики производительности SystemMonitor-а покажут узкие места - https://www.sql.ru/articles/mssql/02111903performancecounters.shtml
14 июн 13, 16:01    [14434547]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
vv40in
Member

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

Как выяснилось,
иногда подключается какая-то удаленная программка и считывает последний ID (следит за наполняемостью таблицы).
Но не думаю, что это оказывает большое влияние..

с процессором, сетевым интерфейсом и диском всё нормально в обоих случаях (нормаьлной работы и при аномальном снижении производительности). Нормально - значит они не перерабатывают.
проц: 50-60%
диск idle: 70-90%
диск write byte/sec: 32 млн
диск read byte/sec: 5 млн
сеть занята на 20-25%

что касается счетчиков базы:

В нормальных условиях:

Buffer Cache Hit Ratio - всегда 99.8,
даже если вести поиск по таблицам (там их много :) (с индексами).

Pages/Sec(?)
Pages lookups/Sec ~900тыс
Pages reads/Sec ~600
Pages writes/Sec ~0
Readahead pages/sec ~180 (и почему-то график имеет несколько гармоник, т.е. есть высокая и низкая частота)..


Счетчиков для аномального снижения производительности пока нет. Оно наступает внезапно :)

а по счетчикам устройств (они сняты для обоих случаев) видно, что устройства - не есть узкое место...
14 июн 13, 18:05    [14435132]     Ответить | Цитировать Сообщить модератору
 Re: непонятное снижение производительности записи  [new]
vv40in
Member

Откуда:
Сообщений: 122
похоже, что после полуночи что-то изменяет статистику и/или устаревает или неправитьно создается новый план выполнения, после чего падает производительность..
как оказалось помогает выполнение
DBCC FREEPROCCACHE
17 июн 13, 15:26    [14442733]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить