SQL-сервер внезапно завис - все соединения с БД активны, но нет ответа - SQL-сервер 2016JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 SQL-сервер внезапно завис - все соединения с БД активны, но нет ответа - SQL-сервер 2016

Сообщение Anonymous »

Я Java-разработчик. Поскольку я новичок в SQL-сервере, у меня ограниченные знания о нем. Я пытаюсь выяснить основную причину, почему наш SQL-сервер внезапно завис, и после перезапуска он стал нормальным.
Симптомы:
~ Потоки Java начали зависать, выяснилось, что соединения Java JDBC начали зависать без какого-либо ответа от БД, что приводило к зависанию потоков
~ Все соединения (около 100 ) были активны до тех пор, пока SQL сервер был перезапущен. Наконец, соединения с БД были закрыты БД после перезапуска. Получено соединение Java JDBC «Соединение сброшено одноранговым узлом» ПОСЛЕ перезапуска БД.
Продолжительность воздействия: 5 часов (до перезапуска)
Технический стек :
Загрузка Java Spring на Weblogic. ORM: спящий режим
SQL-сервер 2016
Ограничение:
Команда перезапустила SQL-сервер прежде, чем мы смогли это сделать экспортировать любую статистику из БД и даже сомневаться, что мы смогли выполнить статистические SQL-запросы до перезапуска SQL-сервера, поскольку БД уже зависла.
Выводы/действия:После перезапуска БД я попытался извлечь статистику из dm_exec_query_stats, однако она отслеживает запросы только на основе времени последнего выполнения. За пораженный период результата не было. Тот же сценарий и для dm_os_waiting_tasks.
Команда сервера сообщает, что загрузка ЦП и памяти была нормальной (мне еще предстоит получить полный отчет).
Можно посмотреть никаких ошибок/проблем в журнале событий Windows и журналах кластера нет. Они выглядят нормально
Некоторые источники Google сообщают, что некоторые запросы могут полностью загружать процессор, что может привести к зависанию SQL-сервера, другие говорят, что некоторые запросы могли блокироваться.
Это может показаться простым или обычным для экспертов по SQL-серверу/администраторов баз данных, однако я погуглил, чтобы найти соответствующую проблему и решение, однако, похоже, они не помогли
Было бы здорово просто помочь мне сослаться на какой-либо документ или совет эксперта. Дайте мне знать, если потребуется дополнительная информация. Заранее спасибо!
Пробывал эти запросы, но безрезультатно
SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query], dbid, deqs.*
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
where deqs.last_execution_time between '2020-09-29 13:16:52.710' and '2020-09-29 23:16:52.710'
ORDER BY deqs.last_execution_time DESC ;

SELECT
qs.sql_handle,
qs.execution_count,
qs.total_worker_time AS Total_CPU,
total_CPU_inSeconds = --Converted from microseconds
qs.total_worker_time/1000000,
average_CPU_inSeconds = --Converted from microseconds
(qs.total_worker_time/1000000) / qs.execution_count,
qs.total_elapsed_time,
total_elapsed_time_inSeconds = --Converted from microseconds
qs.total_elapsed_time/1000000,
st.text,qs.query_hash,
qp.query_plan
FROM
sys.dm_exec_query_stats AS qs
CROSS APPLY
sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS APPLY
sys.dm_exec_query_plan (qs.plan_handle) AS qp
where qs.last_execution_time between '2020-09-29 13:16:52.710' and '2020-09-29 23:16:52.710'
ORDER BY
qs.total_worker_time DESC;

--View waiting tasks per connection
SELECT st.text AS [SQL Text], c.connection_id, w.session_id,
w.wait_duration_ms, w.wait_type, w.resource_address,
w.blocking_session_id, w.resource_description, c.client_net_address, c.connect_time
FROM sys.dm_os_waiting_tasks AS w
INNER JOIN sys.dm_exec_connections AS c ON w.session_id = c.session_id
CROSS APPLY (SELECT * FROM sys.dm_exec_sql_text(c.most_recent_sql_handle)) AS st
WHERE w.session_id > 50 AND w.wait_duration_ms > 0
ORDER BY c.connection_id, w.session_id
GO

-- View waiting tasks for all user processes with additional information
SELECT 'Waiting_tasks' AS [Information], owt.session_id,
owt.wait_duration_ms, owt.wait_type, owt.blocking_session_id,
owt.resource_description, es.program_name, est.text,
est.dbid, eqp.query_plan, er.database_id, es.cpu_time,
es.memory_usage*8 AS memory_usage_KB
FROM sys.dm_os_waiting_tasks owt
INNER JOIN sys.dm_exec_sessions es ON owt.session_id = es.session_id
INNER JOIN sys.dm_exec_requests er ON es.session_id = er.session_id
OUTER APPLY sys.dm_exec_sql_text (er.sql_handle) est
OUTER APPLY sys.dm_exec_query_plan (er.plan_handle) eqp
WHERE es.is_user_process = 1
ORDER BY owt.session_id;
GO;


Подробнее здесь: https://stackoverflow.com/questions/642 ... sponse-sql
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»