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

Откуда:
Сообщений: 217
Ребят, помогите, не могу справится(((.

Регулярно запускается процедура очистки старых событий, точнее вот эта ее часть (вся процедура ниже):

DELETE ev_event FROM ev_event WITH (INDEX(PK_ev_event2)) INNER MERGE JOIN #ev_2delete ON ev_event.event_id BETWEEN @nMinRow AND @nMaxRow AND ev_event.event_id = #ev_2delete.event_id;

Запрос сильно грузит дисковую подсистему. Что делать, как быть?

USE [KAV]
GO
/****** Object: StoredProcedure [dbo].[sp_ev_clean_old_events] Script Date: 05/29/2014 13:50:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_ev_clean_old_events]
@curr_time DATETIME,
@rest_count INT OUTPUT,
@should_repeat BIT OUTPUT
AS SET NOCOUNT ON


SET @should_repeat = 0;
SET @rest_count = 0;

DECLARE @nRstCount INT;

DECLARE @nMinRow BIGINT;
DECLARE @nMaxRow BIGINT;


DECLARE @nTransEventsQueueCount INT
SELECT @nTransEventsQueueCount = COUNT(*) FROM TransEventsQueue
IF( @@ERROR = 0 AND @nTransEventsQueueCount > 3000 )
BEGIN
SET @nTransEventsQueueCount = @nTransEventsQueueCount - 1500
IF @nTransEventsQueueCount > 100000
SET @nTransEventsQueueCount = 100000
IF( @@ERROR = 0 )
EXEC ('DECLARE @dtLimitRecordTime DATETIME; SELECT @dtLimitRecordTime = MAX(record_time) FROM (SELECT TOP ' + @nTransEventsQueueCount + ' record_time FROM TransEventsQueue ORDER BY record_time ASC) t1; DELETE TransEventsDetails FROM TransEventsQueue INNER JOIN TransEventsDetails ON TransEventsQueue.event_id = TransEventsDetails.event_id WHERE TransEventsQueue.record_time < @dtLimitRecordTime ; DELETE TransEventsQueue FROM TransEventsQueue WHERE record_time < @dtLimitRecordTime ')
END

CREATE TABLE #ev_2delete(
event_id BIGINT,
PRIMARY KEY CLUSTERED ([event_id])
);

IF( @@ERROR = 0 )
INSERT INTO #ev_2delete
SELECT TOP 200 ev_event.event_id
FROM ev_event
WHERE ev_event.deadline < @curr_time ;

IF( @@ERROR = 0 )
SELECT @nMaxRow=MAX(#ev_2delete.event_id), @nMinRow=MIN(#ev_2delete.event_id) FROM #ev_2delete;
IF( @@ERROR = 0 )
SET @nMaxRow = ISNULL(@nMaxRow, 0);
IF( @@ERROR = 0 )
SET @nMinRow = ISNULL(@nMinRow, 0);

IF( @@ERROR = 0 )
DELETE ev_event
FROM ev_event WITH (INDEX(PK_ev_event2))
INNER MERGE JOIN #ev_2delete ON
ev_event.event_id BETWEEN @nMinRow AND @nMaxRow AND ev_event.event_id = #ev_2delete.event_id;

IF( @@ERROR = 0 )
INSERT INTO #ev_2delete
SELECT TOP 200 ev_event.event_id
FROM ev_event
WHERE ev_event.deadline < @curr_time ;
IF( @@ERROR = 0 )
SELECT @nRstCount = COUNT(*) FROM #ev_2delete;

IF( @@ERROR = 0 AND @nRstCount = (2 * 200) )
SET @should_repeat = 1;
ELSE IF( @@ERROR = 0 )
SELECT @rest_count = COUNT(*) FROM ev_event;
29 май 14, 14:53    [16091859]     Ответить | Цитировать Сообщить модератору
 Re: Касперский грузит сервак кто нибуть сталкивался?  [new]
Glory
Member

Откуда:
Сообщений: 104760
tsdos
Что делать, как быть?

Улучшать дисковую систему
29 май 14, 14:56    [16091884]     Ответить | Цитировать Сообщить модератору
 Re: Касперский грузит сервак кто нибуть сталкивался?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Glory
tsdos
Что делать, как быть?

Улучшать дисковую систему
Терзают смутные сомнения, что это не поможет...
В запросе куча COUNTов...
Динамический SQL...
Невнятная версия сервера...
И совсем не понятно, какое отношение к запросу имеет Касперский...
29 май 14, 15:04    [16091936]     Ответить | Цитировать Сообщить модератору
 Re: Касперский грузит сервак кто нибуть сталкивался?  [new]
tsdos
Member

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

Нет денег(((... Есть планы вынести базу на отдельную виртуалку и ограничить ее по операциям ввода-вывода. Но может быть как-то можно снизить нагрузку иначе?
29 май 14, 15:06    [16091946]     Ответить | Цитировать Сообщить модератору
 Re: Касперский грузит сервак кто нибуть сталкивался?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sphinx_mv
И совсем не понятно, какое отношение к запросу имеет Касперский...

Касперский умеет хранить данные в разных СУБД. В том числе в MSSQL
Предложенный фрагмент кода скорее всего какие-то действия пользователя в ГУИ по очистке истории.
29 май 14, 15:08    [16091956]     Ответить | Цитировать Сообщить модератору
 Re: Касперский грузит сервак кто нибуть сталкивался?  [new]
tsdos
Member

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

База для ПО Касперского, месяца два назад справились, ограничив хранение событий с 180 до 90 дней, вроде все устаканилось, но вот, снова началось(((...
29 май 14, 15:09    [16091960]     Ответить | Цитировать Сообщить модератору
 Re: Касперский грузит сервак кто нибуть сталкивался?  [new]
rigus
Member

Откуда: Сургут
Сообщений: 349
http://forum.kaspersky.com/index.php?showtopic=296397
29 май 14, 15:14    [16091999]     Ответить | Цитировать Сообщить модератору
 Re: Касперский грузит сервак кто нибуть сталкивался?  [new]
tsdos
Member

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

Спасибо большое! Пойду в сторону патча рыть. Хотя два месяца назад нам запрос в службу поддержки не помог (т.е. передали на рассмотрение экспертов), а затем мы вроде и решили проблему. Еще раз спасибо всем!.
29 май 14, 15:27    [16092100]     Ответить | Цитировать Сообщить модератору
 Re: Касперский грузит сервак кто нибуть сталкивался?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
tsdos
sphinx_mv,

База для ПО Касперского, месяца два назад справились, ограничив хранение событий с 180 до 90 дней, вроде все устаканилось, но вот, снова началось(((...
Версия SQL? Структура таблиц (включая наличие индексов)?
Возможность переписать скрипт на более "прямой способ"?

PS. Лет ...надцать назад (еще на SQL2K) столкнулись с, как бы, "непонятной проблемой": при удалении с SQL-сервера базы данных вместе с историей бэкапов сервер "ну, очень тормозил"... "Пропатчили" системные таблицы, где история хранится (банально добавили индексы) - "сервер тормозит" пропало... :)
29 май 14, 15:37    [16092181]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить