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

Откуда:
Сообщений: 660
Привет
подскажите - можно ли сделать так
каждый день в 7 утра автоматом рестартовать mssql сервер если за посл 20 минут не было ни одного запроса от юзера
26 июн 13, 03:50    [14483554]     Ответить | Цитировать Сообщить модератору
 Re: Рестарт сервера по расписанию  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
Alexander_fx
Привет
подскажите - можно ли сделать так
каждый день в 7 утра автоматом рестартовать mssql сервер если за посл 20 минут не было ни одного запроса от юзера

На хрена эта дребедень?
26 июн 13, 07:55    [14483622]     Ответить | Цитировать Сообщить модератору
 Re: Рестарт сервера по расписанию  [new]
Владимир Затуливетер
Member

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

жуткий изврат у вас какой-то получается.
сервера обычно всегда включены, и не требуют какой-либо перезагрузки для их правильной работы.
вы какую проблему пытаетесь решить?
похоже на то, что подходите не стого конца.
26 июн 13, 08:33    [14483700]     Ответить | Цитировать Сообщить модератору
 Re: Рестарт сервера по расписанию  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
Alexander_fx
Привет
подскажите - можно ли сделать так
каждый день в 7 утра автоматом рестартовать mssql сервер если за посл 20 минут не было ни одного запроса от юзера


Наверное надо смотреть в сторону аудита по активности пользователей, а так зачем это нужно???
Если уж хотите перезапуск, скажите регламентно сервер перестартует в 7 утра и все, если пользователь работал в это время, то это его проблемы.
И еще интересует, с чем связан перезапуск сервиса (сервера).
26 июн 13, 08:56    [14483751]     Ответить | Цитировать Сообщить модератору
 Re: Рестарт сервера по расписанию  [new]
imato
Member

Откуда: Москва
Сообщений: 80
Alexander_fx,
Если это так нужно, то смотрите в сторону PowerShell

Из чего состоит решение.

Как посмотреть активные сессии
select * from sys.dm_exec_sessions

Как использовать команды TSQL в PS
http://stackoverflow.com/questions/1758779/retrieving-data-using-select-sql-statement-in-powershell

Как перезапустить сервер из PS
http://msdn.microsoft.com/en-us/library/hh403394.aspx

После этого делаем системный шедулер по запуску скрипта.
26 июн 13, 09:11    [14483820]     Ответить | Цитировать Сообщить модератору
 Re: Рестарт сервера по расписанию  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Alexander_fx
Привет
подскажите - можно ли сделать так
каждый день в 7 утра автоматом рестартовать mssql сервер если за посл 20 минут не было ни одного запроса от юзера

может стоит почитать как бекапить лог , аудит тембд... чем именно вызванно такое требование ?
26 июн 13, 10:54    [14484485]     Ответить | Цитировать Сообщить модератору
 Re: Рестарт сервера по расписанию  [new]
Alexander_fx
Member

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

чем меньше ответов у пользователя тем более толковые ответы :)

сервер каждый день пишет данные в вновь создаваемые таблицы
таблици большие - 5-10 гигов в день
поэтому к концу дня в памяти висят индексы этого дня
память на сервере используется полностью
и когда юзер в след день делает запрос новых данных сервер чуток притормаживает освобождая память.
26 июн 13, 14:51    [14486814]     Ответить | Цитировать Сообщить модератору
 Re: Рестарт сервера по расписанию  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Alexander_fx
сервер каждый день пишет данные в вновь создаваемые таблицы
таблици большие - 5-10 гигов в день
.

Ну и наздоровье - он по факту для етого и предназначен
Alexander_fx
поэтому к концу дня в памяти висят индексы этого дня
память на сервере используется полностью
и когда юзер в след день делает запрос новых данных сервер чуток притормаживает освобождая память.

Вы как проверяли,что они именно в памяти то ? Ну и что что сервер занял весь РАМ который вы ему отдали...вы вообще проверяли что у вас реально в памяти сидит то ?
ИМХО,промониторте сисетму железо+сиквел и вы на 99% откажетесь от идеии перегружать машину. Когда пользователь делает завпрос - вы что ловите то ,освобождение памяти ?
У вас 4какое то ст ранное представление о том как живет сиквел и как он использует память ,да и диски подозреваю тоже
26 июн 13, 15:01    [14486919]     Ответить | Цитировать Сообщить модератору
 Re: Рестарт сервера по расписанию  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Alexander_fx
и когда юзер в след день делает запрос новых данных сервер чуток притормаживает освобождая память.
это нормальная работа сервера - вытеснять из буферпула маловостребованные данные в случае нехватки памяти. а для определения причин "притормаживания" надо искать узкие места, что-нибудь такое посмотрите Troubleshooting Performance Problems in SQL Server 2008
26 июн 13, 15:09    [14487006]     Ответить | Цитировать Сообщить модератору
 Re: Рестарт сервера по расписанию  [new]
Alexander_fx
Member

Откуда:
Сообщений: 660
Shakill
Alexander_fx
и когда юзер в след день делает запрос новых данных сервер чуток притормаживает освобождая память.
это нормальная работа сервера - вытеснять из буферпула маловостребованные данные в случае нехватки памяти. а для определения причин "притормаживания" надо искать узкие места, что-нибудь такое посмотрите Troubleshooting Performance Problems in SQL Server 2008


да я понимаю что это нормально
поэтому и хочу сделать это принудительно в то время когда это менее болезнено
я лучше вытесню из памяти обьекты которые мне не понадобятся в 7 утра чем в 10 когда задержка в пару сек приведет к небольшой заминке сервера
26 июн 13, 15:51    [14487425]     Ответить | Цитировать Сообщить модератору
 Re: Рестарт сервера по расписанию  [new]
Maxx
Member [скрыт]

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

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

Откуда:
Сообщений: 37254
Кеш можно сбросить командой, не обязательно для этого рестартить сервер.
26 июн 13, 15:58    [14487505]     Ответить | Цитировать Сообщить модератору
 Re: Рестарт сервера по расписанию  [new]
Denis Reznik
Member

Откуда: Киев
Сообщений: 156
Alexander_fx,

DBCC DROPCLEANBUFFERS

очистит кэш данных. Попробуйте, если это решает проблему тормозов потом при запросе, то и рестартовать не нужно, а обойтись этой командой. Если не решает, то проблему следует искать уже в другом месте.
26 июн 13, 16:25    [14487716]     Ответить | Цитировать Сообщить модератору
 Re: Рестарт сервера по расписанию  [new]
Alexander_fx
Member

Откуда:
Сообщений: 660
Denis Reznik
Alexander_fx,

DBCC DROPCLEANBUFFERS

очистит кэш данных. Попробуйте, если это решает проблему тормозов потом при запросе, то и рестартовать не нужно, а обойтись этой командой. Если не решает, то проблему следует искать уже в другом месте.



после выполнения DBCC DROPCLEANBUFFERS памяти свободной больше не становиться
вижу что занимает память mssql
а как определить чем именно занята память - что за объекты в памяти mssql?
28 июн 13, 15:50    [14498095]     Ответить | Цитировать Сообщить модератору
 Re: Рестарт сервера по расписанию  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Еще раз - сиквел занял всю память которую вы ему выделили - точка. И сие никак не говорит о том,что в етой памяти мусор,или туда не влезет все что вы хотите. Александр вы копаете совершенно в другую сторону , то что вы видите в таск манагере..совершенно не говорит о том,что у вас недостаточно памяти для сиквела. Ееще раз повторюсь - профайлер запускайте и анализируйте "длиноиграющие" запросы ,смотрет планы их.. тогда стенет я сно что тормозит + ессно не мешало б на еото же период перфом запустить и собрать статистику по железу.
А запрос по памяти вот он:
DECLARE @Perf TABLE (object_name nvarchar(20), counter_name nvarchar(128), instance_name nvarchar(128), cntr_value BIGINT, formatted_value NUMERIC(20, 2), ShortName NVARCHAR(20))
INSERT INTO @Perf(object_name, counter_name, instance_name, cntr_value, formatted_value, ShortName)
SELECT 
  CASE 
    WHEN PATINDEX('%:Memory Manager%', object_name)> 0 THEN 'Memory Manager'
    WHEN PATINDEX('%:Buffer Manager%', object_name)> 0 THEN 'Buffer Manager'
    WHEN PATINDEX('%:Plan Cache%', object_name)> 0 THEN 'Plan Cache'
    WHEN PATINDEX('%:Buffer Node%', object_name)> 0 THEN 'Buffer Node' -- 2008
    WHEN PATINDEX('%:Memory Node%', object_name)> 0 THEN 'Memory Node' -- 2012
    ELSE NULL 
  END AS object_name,
  CAST(RTRIM(counter_name) AS NVARCHAR(100)) AS counter_name, 
  RTRIM(instance_name) AS instance_name, 
  cntr_value,
  CAST(NULL AS DECIMAL(20,2)) AS formatted_value,
  SUBSTRING(counter_name,  1, PATINDEX('% %', counter_name)) ShortName
FROM sys.dm_os_performance_counters 
WHERE (object_name LIKE '%:Buffer Node%' OR object_name LIKE '%:Buffer Manager%' OR object_name LIKE '%:Memory Node%' OR object_name LIKE '%:Plan Cache%')
  AND (counter_name LIKE '%pages %' OR counter_name = 'Page life expectancy' OR counter_name LIKE '%Node Memory (KB)%')
  OR  (object_name LIKE '%:Memory Manager%'
        AND RTRIM(counter_name) IN ('Granted Workspace Memory (KB)', 'Maximum Workspace Memory (KB)',
                                    'Memory Grants Outstanding',     'Memory Grants Pending',
                                    'Target Server Memory (KB)',     'Total Server Memory (KB)',
                                    -- for 2012
                                    'Free Memory (KB)',              'Reserved Server Memory (KB)',
                                    'Database Cache Memory (KB)',    'Stolen Server Memory (KB)')
      )

-- Convert values from pages and KB to MB and rename counters accordingly
UPDATE @Perf
SET 
  counter_name = REPLACE(REPLACE(counter_name, 'pages', '(MB)'), '(KB)', '(MB)'), 
  formatted_value = 
  CASE 
    WHEN counter_name LIKE '%pages' THEN cntr_value/128. 
    WHEN counter_name LIKE '%(KB)' THEN cntr_value/1024. 
    ELSE cntr_value
  END

-- Update counter/object names so they look like in 2012
UPDATE PC
SET 
  object_name = REPLACE(object_name, 'Buffer', 'Memory'),
  counter_name = ISNULL(M.NewName, counter_name)  
FROM @Perf PC
  LEFT JOIN
  (
    SELECT 'Free (MB)' AS OldName, 'Free Memory (MB)' AS NewName UNION ALL
    SELECT 'Database (MB)', 'Database Cache Memory (MB)' UNION ALL
    SELECT 'Stolen (MB)', 'Stolen Server Memory (MB)' UNION ALL
    SELECT 'Reserved (MB)', 'Reserved Server Memory (MB)' UNION ALL
    SELECT 'Foreign (MB)', 'Foreign Node Memory (KB)'
  ) M ON M.OldName = PC.counter_name
  AND NewName NOT IN (SELECT counter_name FROM @Perf WHERE object_name = 'Memory Manager') 
WHERE object_name IN ('Buffer Manager', 'Buffer Node')


-- Build Memory Tree
DECLARE @MemTree TABLE (Id int, ParentId int, counter_name nvarchar(128), formatted_value NUMERIC(20, 2), ShortName NVARCHAR(20))

-- Level 5
INSERT @MemTree(Id, ParentId, counter_name, formatted_value, ShortName)
SELECT
  Id = 1223,
  ParentId = 1222,
  instance_name + ' (MB)' as counter_name, 
  formatted_value,
  ShortName
FROM @Perf
WHERE object_name = 'Plan Cache' 
  AND counter_name IN ('Cache (MB)')
  AND instance_name <> '_Total'

-- Level 4
INSERT @MemTree(Id, ParentId, counter_name, formatted_value, ShortName)
SELECT
  Id = 1222,
  ParentId = 1220,
  'Plan ' + counter_name as counter_name, 
  formatted_value,
  ShortName
FROM @Perf
WHERE object_name = 'Plan Cache' 
  AND counter_name IN ('Cache (MB)')
  AND instance_name = '_Total'
UNION ALL

SELECT
  Id = 1112,
  ParentId = 1110,
  counter_name, 
  formatted_value,
  ShortName
FROM @Perf
WHERE object_name = 'Memory Manager' 
  AND counter_name IN ('Reserved Server Memory (MB)')
UNION ALL
SELECT
  Id = P.ParentID + 1,
  ParentID = P.ParentID,
  'Used Workspace Memory (MB)' AS counter_name,
  SUM(used_memory_kb)/1024. as formatted_value,
  NULL AS ShortName
FROM sys.dm_exec_query_resource_semaphores 
  CROSS JOIN (SELECT 1220 AS ParentID UNION ALL SELECT 1110) P
GROUP BY P.ParentID

-- Level 3
INSERT @MemTree(Id, ParentId, counter_name, formatted_value, ShortName)
SELECT
  Id = CASE counter_name 
           WHEN 'Granted Workspace Memory (MB)' THEN 1110 
           WHEN 'Stolen Server Memory (MB)' THEN 1220 
           ELSE 1210
         END,
  ParentId = CASE counter_name 
               WHEN 'Granted Workspace Memory (MB)' THEN 1100 
               ELSE 1200 
             END,
  counter_name, 
  formatted_value,
  ShortName
FROM @Perf
WHERE object_name = 'Memory Manager' 
  AND counter_name IN ('Stolen Server Memory (MB)', 'Database Cache Memory (MB)', 'Free Memory (MB)', 'Granted Workspace Memory (MB)')

-- Level 2
INSERT @MemTree(Id, ParentId, counter_name, formatted_value, ShortName)
SELECT
  Id = CASE WHEN counter_name = 'Maximum Workspace Memory (MB)' THEN 1100 ELSE 1200 END,
  ParentId = 1000,
  counter_name, 
  formatted_value,
  ShortName
FROM @Perf
WHERE object_name = 'Memory Manager' AND 
  counter_name IN ('Total Server Memory (MB)', 'Maximum Workspace Memory (MB)') 

-- Level 1
INSERT @MemTree(Id, ParentId, counter_name, formatted_value, ShortName)
SELECT 
  Id = 1000,
  ParentId = NULL,
  counter_name, 
  formatted_value,
  ShortName
FROM @Perf
WHERE object_name = 'Memory Manager' AND 
  counter_name IN ('Target Server Memory (MB)')

-- Results:

-- PLE and Memory Grants
SELECT counter_name AS [Counter Name], cntr_value as Value
FROM @Perf
WHERE 
  object_name = 'Memory Manager' 
  AND counter_name IN ('Memory Grants Outstanding', 'Memory Grants Pending', 'Page life expectancy')

-- Memory tree
;WITH CTE
AS
(
SELECT 0 as lvl, counter_name, formatted_value,  CAST(NULL AS DECIMAL(20,2)) As Perc, Id, NULL AS ParentId, ShortName
FROM @MemTree
WHERE ParentId IS NULL
UNION ALL
SELECT CTE.lvl+1,
  CAST(REPLICATE(' ', 6*(CTE.lvl)) + NCHAR(124) + REPLICATE(NCHAR(183), 3) + MT.counter_name AS NVARCHAR(128)), 
  MT.formatted_value, CAST(ISNULL(1.0*MT.formatted_value/NULLIF(CTE.formatted_value, 0),0) AS DECIMAL(20,2)) AS Perc, MT.Id, MT.ParentId, MT.ShortName
FROM @MemTree MT
  INNER JOIN CTE ON MT.ParentId = CTE.Id
)
SELECT 
  counter_name AS [Counter Name], formatted_value AS Value, Perc AS [%]
FROM CTE
ORDER BY ISNULL(Id, 10000), formatted_value DESC
29 июн 13, 15:59    [14500513]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить