powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / А как посмотреть кто использует темпдб на read-only ноде в кластере?
32 сообщений из 32, показаны все 2 страниц
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113759
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Есть олвейс-он кластер.


На реплике разрастается темпдб.





А как посмотреть какие именно сессии ее используют?
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113777
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
-- space used in Tempdb:
select
    t1.session_id
    /*, t1.request_id*/
    , task_alloc_GB = cast((t1.task_alloc_pages * 8./1024./1024.) as numeric(10,1))
    , task_dealloc_GB = cast((t1.task_dealloc_pages * 8./1024./1024.) as numeric(10,1))
    , host= case when t1.session_id <= 50 then 'SYS' else s1.host_name end
    , s1.login_name
    , s1.status
    , s1.last_request_start_time
    , s1.last_request_end_time
    , s1.row_count
    , s1.transaction_isolation_level
    , query_text=
        coalesce((SELECT SUBSTRING(text, t2.statement_start_offset/2 + 1,
          (CASE WHEN statement_end_offset = -1
              THEN LEN(CONVERT(nvarchar(max),text)) * 2
                   ELSE statement_end_offset
              END - t2.statement_start_offset)/2)
        FROM sys.dm_exec_sql_text(t2.sql_handle)) , 'Not currently executing')
    , query_plan=(SELECT query_plan from sys.dm_exec_query_plan(t2.plan_handle))
from
    (Select session_id, request_id
    , task_alloc_pages=sum(internal_objects_alloc_page_count +   user_objects_alloc_page_count)
    , task_dealloc_pages = sum (internal_objects_dealloc_page_count + user_objects_dealloc_page_count)
    from sys.dm_db_task_space_usage
    group by session_id, request_id) as t1
left join sys.dm_exec_requests as t2 on
    t1.session_id = t2.session_id
    and t1.request_id = t2.request_id
left join sys.dm_exec_sessions as s1 on
    t1.session_id=s1.session_id
where
    t1.session_id > 50 -- ignore system unless you suspect there's a problem there
    and t1.session_id <> @@SPID -- ignore this request itself
order by t1.task_alloc_pages DESC;
GO

-- sessions which are using TempDB currently:
SELECT
(dmv_tsu.internal_objects_alloc_page_count - dmv_tsu.internal_objects_dealloc_page_count) AS OutSt_int_obj_p_count,
(dmv_tsu.user_objects_alloc_page_count - dmv_tsu.user_objects_dealloc_page_count) AS OutSt_user_obj_p_count,
--st.dbid AS QueryExecutionContextDBID,
DB_NAME(st.dbid) AS QueryExecContextDBNAME,
--st.objectid AS ModuleObjectId,
SUBSTRING(st.TEXT,
dmv_er.statement_start_offset/2 + 1,
(CASE WHEN dmv_er.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX),st.TEXT)) * 2
ELSE dmv_er.statement_end_offset
END - dmv_er.statement_start_offset)/2) AS Query_Text,
dmv_tsu.session_id,
--dmv_tsu.request_id,
dmv_tsu.exec_context_id,
--(dmv_tsu.user_objects_alloc_page_count - dmv_tsu.user_objects_dealloc_page_count) AS OutStanding_user_objects_page_counts,
--(dmv_tsu.internal_objects_alloc_page_count - dmv_tsu.internal_objects_dealloc_page_count) AS OutStanding_internal_objects_page_counts,
dmv_er.start_time,
dmv_er.command,
dmv_er.open_transaction_count,
dmv_er.percent_complete,
dmv_er.estimated_completion_time,
dmv_er.cpu_time,
dmv_er.total_elapsed_time,
dmv_er.reads,dmv_er.writes,
dmv_er.logical_reads,
dmv_er.granted_query_memory,
dmv_es.HOST_NAME,
dmv_es.login_name,
dmv_es.program_name
FROM sys.dm_db_task_space_usage dmv_tsu
INNER JOIN sys.dm_exec_requests dmv_er
ON (dmv_tsu.session_id = dmv_er.session_id AND dmv_tsu.request_id = dmv_er.request_id)
INNER JOIN sys.dm_exec_sessions dmv_es
ON (dmv_tsu.session_id = dmv_es.session_id)
CROSS APPLY sys.dm_exec_sql_text(dmv_er.sql_handle) st
WHERE (dmv_tsu.internal_objects_alloc_page_count + dmv_tsu.user_objects_alloc_page_count) > 0
ORDER BY (dmv_tsu.user_objects_alloc_page_count - dmv_tsu.user_objects_dealloc_page_count) + (dmv_tsu.internal_objects_alloc_page_count - dmv_tsu.internal_objects_dealloc_page_count) DESC

...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113789
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
-- space used in Tempdb:
select
    t1.session_id
    /*, t1.request_id*/
    , task_alloc_GB = cast((t1.task_alloc_pages * 8./1024./1024.) as numeric(10,1))
    , task_dealloc_GB = cast((t1.task_dealloc_pages * 8./1024./1024.) as numeric(10,1))
    , host= case when t1.session_id <= 50 then 'SYS' else s1.host_name end
    , s1.login_name
    , s1.status
    , s1.last_request_start_time
    , s1.last_request_end_time
    , s1.row_count
    , s1.transaction_isolation_level
    , query_text=
        coalesce((SELECT SUBSTRING(text, t2.statement_start_offset/2 + 1,
          (CASE WHEN statement_end_offset = -1
              THEN LEN(CONVERT(nvarchar(max),text)) * 2
                   ELSE statement_end_offset
              END - t2.statement_start_offset)/2)
        FROM sys.dm_exec_sql_text(t2.sql_handle)) , 'Not currently executing')
    , query_plan=(SELECT query_plan from sys.dm_exec_query_plan(t2.plan_handle))
from
    (Select session_id, request_id
    , task_alloc_pages=sum(internal_objects_alloc_page_count +   user_objects_alloc_page_count)
    , task_dealloc_pages = sum (internal_objects_dealloc_page_count + user_objects_dealloc_page_count)
    from sys.dm_db_task_space_usage
    group by session_id, request_id) as t1
left join sys.dm_exec_requests as t2 on
    t1.session_id = t2.session_id
    and t1.request_id = t2.request_id
left join sys.dm_exec_sessions as s1 on
    t1.session_id=s1.session_id
where
    t1.session_id > 50 -- ignore system unless you suspect there's a problem there
    and t1.session_id <> @@SPID -- ignore this request itself
order by t1.task_alloc_pages DESC;
GO

-- sessions which are using TempDB currently:
SELECT
(dmv_tsu.internal_objects_alloc_page_count - dmv_tsu.internal_objects_dealloc_page_count) AS OutSt_int_obj_p_count,
(dmv_tsu.user_objects_alloc_page_count - dmv_tsu.user_objects_dealloc_page_count) AS OutSt_user_obj_p_count,
--st.dbid AS QueryExecutionContextDBID,
DB_NAME(st.dbid) AS QueryExecContextDBNAME,
--st.objectid AS ModuleObjectId,
SUBSTRING(st.TEXT,
dmv_er.statement_start_offset/2 + 1,
(CASE WHEN dmv_er.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX),st.TEXT)) * 2
ELSE dmv_er.statement_end_offset
END - dmv_er.statement_start_offset)/2) AS Query_Text,
dmv_tsu.session_id,
--dmv_tsu.request_id,
dmv_tsu.exec_context_id,
--(dmv_tsu.user_objects_alloc_page_count - dmv_tsu.user_objects_dealloc_page_count) AS OutStanding_user_objects_page_counts,
--(dmv_tsu.internal_objects_alloc_page_count - dmv_tsu.internal_objects_dealloc_page_count) AS OutStanding_internal_objects_page_counts,
dmv_er.start_time,
dmv_er.command,
dmv_er.open_transaction_count,
dmv_er.percent_complete,
dmv_er.estimated_completion_time,
dmv_er.cpu_time,
dmv_er.total_elapsed_time,
dmv_er.reads,dmv_er.writes,
dmv_er.logical_reads,
dmv_er.granted_query_memory,
dmv_es.HOST_NAME,
dmv_es.login_name,
dmv_es.program_name
FROM sys.dm_db_task_space_usage dmv_tsu
INNER JOIN sys.dm_exec_requests dmv_er
ON (dmv_tsu.session_id = dmv_er.session_id AND dmv_tsu.request_id = dmv_er.request_id)
INNER JOIN sys.dm_exec_sessions dmv_es
ON (dmv_tsu.session_id = dmv_es.session_id)
CROSS APPLY sys.dm_exec_sql_text(dmv_er.sql_handle) st
WHERE (dmv_tsu.internal_objects_alloc_page_count + dmv_tsu.user_objects_alloc_page_count) > 0
ORDER BY (dmv_tsu.user_objects_alloc_page_count - dmv_tsu.user_objects_dealloc_page_count) + (dmv_tsu.internal_objects_alloc_page_count - dmv_tsu.internal_objects_dealloc_page_count) DESC





Да в том-то и дело....


The target database ('Prod') is in an availability group and is currently accessible for connections when the application intent is set to read only. For more information about application intent, see SQL Server Books Online.
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113792
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqq_2,

добавьте use master;
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113793
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar
qqq_2,

добавьте use master;


ошибка та же.
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113795
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqq_2, не верю. Покажи целиком какой запрос ты выполняешь.
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113797
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar
qqq_2, не верю. Покажи целиком какой запрос ты выполняешь.


Я бы хотел тоже не верить, но факт есть факт.
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113801
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а такой если выполнить?
-- space used in Tempdb:
use master;
select
t1.session_id
/*, t1.request_id*/
, task_alloc_GB = cast((t1.task_alloc_pages * 8./1024./1024.) as numeric(10,1))
, task_dealloc_GB = cast((t1.task_dealloc_pages * 8./1024./1024.) as numeric(10,1))
, host= case when t1.session_id <= 50 then 'SYS' else s1.host_name end
, s1.login_name
, s1.status
, s1.last_request_start_time
, s1.last_request_end_time
, s1.row_count
, s1.transaction_isolation_level
, query_text=
coalesce((SELECT SUBSTRING(text, t2.statement_start_offset/2 + 1,
(CASE WHEN statement_end_offset = -1
THEN LEN(CONVERT(nvarchar(max),text)) * 2
ELSE statement_end_offset
END - t2.statement_start_offset)/2)
FROM sys.dm_exec_sql_text(t2.sql_handle)) , 'Not currently executing')
, query_plan=(SELECT query_plan from sys.dm_exec_query_plan(t2.plan_handle))
from
(Select session_id, request_id
, task_alloc_pages=sum(internal_objects_alloc_page_count + user_objects_alloc_page_count)
, task_dealloc_pages = sum (internal_objects_dealloc_page_count + user_objects_dealloc_page_count)
from sys.dm_db_task_space_usage
group by session_id, request_id) as t1
left join sys.dm_exec_requests as t2 on
t1.session_id = t2.session_id
and t1.request_id = t2.request_id
left join sys.dm_exec_sessions as s1 on
t1.session_id=s1.session_id
where
t1.session_id > 50 -- ignore system unless you suspect there's a problem there
and t1.session_id <> @@SPID -- ignore this request itself
order by t1.task_alloc_pages DESC;
GO
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113884
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar
а такой если выполнить?
-- space used in Tempdb:
use master;
select
t1.session_id
/*, t1.request_id*/
, task_alloc_GB = cast((t1.task_alloc_pages * 8./1024./1024.) as numeric(10,1))
, task_dealloc_GB = cast((t1.task_dealloc_pages * 8./1024./1024.) as numeric(10,1))
, host= case when t1.session_id <= 50 then 'SYS' else s1.host_name end
, s1.login_name
, s1.status
, s1.last_request_start_time
, s1.last_request_end_time
, s1.row_count
, s1.transaction_isolation_level
, query_text=
coalesce((SELECT SUBSTRING(text, t2.statement_start_offset/2 + 1,
(CASE WHEN statement_end_offset = -1
THEN LEN(CONVERT(nvarchar(max),text)) * 2
ELSE statement_end_offset
END - t2.statement_start_offset)/2)
FROM sys.dm_exec_sql_text(t2.sql_handle)) , 'Not currently executing')
, query_plan=(SELECT query_plan from sys.dm_exec_query_plan(t2.plan_handle))
from
(Select session_id, request_id
, task_alloc_pages=sum(internal_objects_alloc_page_count + user_objects_alloc_page_count)
, task_dealloc_pages = sum (internal_objects_dealloc_page_count + user_objects_dealloc_page_count)
from sys.dm_db_task_space_usage
group by session_id, request_id) as t1
left join sys.dm_exec_requests as t2 on
t1.session_id = t2.session_id
and t1.request_id = t2.request_id
left join sys.dm_exec_sessions as s1 on
t1.session_id=s1.session_id
where
t1.session_id > 50 -- ignore system unless you suspect there's a problem there
and t1.session_id <> @@SPID -- ignore this request itself
order by t1.task_alloc_pages DESC;
GO



Точно такая же ошибка.
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113887
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В SQL Server наверное редко используется кластер и ошибку подобную мало кто встречал (((
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113911
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqq_2
Gallemar
а такой если выполнить?
-- space used in Tempdb:
use master;
select
t1.session_id
/*, t1.request_id*/
, task_alloc_GB = cast((t1.task_alloc_pages * 8./1024./1024.) as numeric(10,1))
, task_dealloc_GB = cast((t1.task_dealloc_pages * 8./1024./1024.) as numeric(10,1))
, host= case when t1.session_id <= 50 then 'SYS' else s1.host_name end
, s1.login_name
, s1.status
, s1.last_request_start_time
, s1.last_request_end_time
, s1.row_count
, s1.transaction_isolation_level
, query_text=
coalesce((SELECT SUBSTRING(text, t2.statement_start_offset/2 + 1,
(CASE WHEN statement_end_offset = -1
THEN LEN(CONVERT(nvarchar(max),text)) * 2
ELSE statement_end_offset
END - t2.statement_start_offset)/2)
FROM sys.dm_exec_sql_text(t2.sql_handle)) , 'Not currently executing')
, query_plan=(SELECT query_plan from sys.dm_exec_query_plan(t2.plan_handle))
from
(Select session_id, request_id
, task_alloc_pages=sum(internal_objects_alloc_page_count + user_objects_alloc_page_count)
, task_dealloc_pages = sum (internal_objects_dealloc_page_count + user_objects_dealloc_page_count)
from sys.dm_db_task_space_usage
group by session_id, request_id) as t1
left join sys.dm_exec_requests as t2 on
t1.session_id = t2.session_id
and t1.request_id = t2.request_id
left join sys.dm_exec_sessions as s1 on
t1.session_id=s1.session_id
where
t1.session_id > 50 -- ignore system unless you suspect there's a problem there
and t1.session_id <> @@SPID -- ignore this request itself
order by t1.task_alloc_pages DESC;
GO



Точно такая же ошибка.


Не верю. Проверяю в аналогичных условиях. Такая ошибка при попытке сделать запрос к неслужебной бд
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113924
qqq_2,

Tak moget poprobovat ustanovit context "intent is set to read only" v connect SSMS?
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113933
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПалЪ СанычЪ
qqq_2,

Tak moget poprobovat ustanovit context "intent is set to read only" v connect SSMS?

Как вариант, хотя должно работать и без этого.
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40113941
ПалЪ СанычЪ
qqq_2,

Tak moget poprobovat ustanovit context "intent is set to read only" v connect SSMS?

либо так.

либо в запросе вытереть кусок про получение плана запроса
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40114003
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПалЪ СанычЪ
qqq_2,

Tak moget poprobovat ustanovit context "intent is set to read only" v connect SSMS?


Спасибо, так сработало.
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40114005
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar
ПалЪ СанычЪ
qqq_2,

Tak moget poprobovat ustanovit context "intent is set to read only" v connect SSMS?

Как вариант, хотя должно работать и без этого.


Без этого не хочет.


А подскажите, как этот параметр в SQLAgent вставить?
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40114671
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как

в sqlcmd

впихнуть context intent is set to read only

?
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40114673
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqq_2
Подскажите как

в sqlcmd

впихнуть context intent is set to read only

?



Нашел


-K ReadOnly
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40114674
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, мне надо сохранить куда-то резальтат этого скрипта, а как не пойму, ведь БД на реплики в реадонли и туда ничего не пишется :(
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40114692
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqq_2
В общем, мне надо сохранить куда-то резальтат этого скрипта, а как не пойму, ведь БД на реплики в реадонли и туда ничего не пишется :(

сделай экспорт результата в csv
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40114696
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqq_2
В общем, мне надо сохранить куда-то резальтат этого скрипта, а как не пойму, ведь БД на реплики в реадонли и туда ничего не пишется :(

сохранить можно
- в темпдб (до рестарта)
- в master/msdb
- через линкед-сервер куда-то еще
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40115290
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar
qqq_2
В общем, мне надо сохранить куда-то резальтат этого скрипта, а как не пойму, ведь БД на реплики в реадонли и туда ничего не пишется :(

сделай экспорт результата в csv


Так и сделал.
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40115291
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad
qqq_2
В общем, мне надо сохранить куда-то резальтат этого скрипта, а как не пойму, ведь БД на реплики в реадонли и туда ничего не пишется :(

сохранить можно
- в темпдб (до рестарта)
- в master/msdb
- через линкед-сервер куда-то еще


Через линкед не получилось.



Но вопрос уже не в этом.
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40115294
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, проблема такая:


Когда дико начинает рости tempdb (с 1 Гб до 200Гб за пол часа),


этот скрипт:

22399145


Не показывает ни одной сессии, которая бы как-либо сильно использовала tempdb.

Т.е. я его выполнил во время роста раз 10 и он ни разу не показал использование темп БД более 100мб.

Суммарно по всем сессия мож 200Мб и было, но не больше.


Скажите, как увидеть кто же использует tempdb в действительности?

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

но в сессия везде рид коммитет показывает (
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40115304
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqq_2,

посмотрите, может у вас version store место отъедает
https://thesurfingdba.weebly.com/my-version-store-is-huge.html
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40115307
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqq_2,

tempdb используется для хранения версий строк, может это как-то связано с RCSI, не знаю точно.
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40115309
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
qqq_2,

tempdb используется для хранения версий строк, может это как-то связано с RCSI, не знаю точно.


А как можно проверить?
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40115311
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad
qqq_2,

посмотрите, может у вас version store место отъедает
https://thesurfingdba.weebly.com/my-version-store-is-huge.html


Не открывается ссылочка.

Если у вас открывается, можете сюда скапировать текст?
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40115312
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, непноятно почему она растет, если БД в реадонли...
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40115314
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqq_2
komrad
qqq_2,

посмотрите, может у вас version store место отъедает
https://thesurfingdba.weebly.com/my-version-store-is-huge.html


Не открывается ссылочка.

Если у вас открывается, можете сюда скапировать текст?


содержимое
My Version Store is huge!!!!
Are you using Read Committed Snapshot isoloation? We are and it is blowing up our TempDB.

I began to investigate why TempDB is growing so large especially on some of my production servers. I found that our main prod databases are using Read Committed Snapshot Isolation or (RCSI). This isolation level changes the type of concurrency that SQL Server will use. By default SQL Server uses pessimistic locking mean writers block readers and readers block writers. RCSI is optimistic blocking, much like Oracle or Postgres. RCSI creates a version store.
The version store contains the committed rows which is how a SELECT operation does not get blocked when another UPDATE/DELETE is operating on the same row, because the SELECT reads the row from the version store, instead of the actual base table. When you enable this, the row has to be stored somewhere and tempdb happens to be the place. A row is maintained in the version store when there are transactions operating on that row in question. When the transaction is committed, the row is cleaned up from the version store tables.


Row versions must be stored for as long as an active transaction needs to access it. Once every minute, a background thread removes row versions that are no longer needed and frees up the version space in tempdb. A long-running transaction prevents space in the version store from being released if it meets any of the following conditions:
• It uses row versioning-based isolation.
• It uses triggers, MARS, or online index build operations.
• It generates row versions.


We are using two of the three conditions .


The below query tells us how big the Version Store has grown. The Version store is 557 GBs which is over 10 times large than the prod database. I tried to do a row count to see how many rows were in the version store. I let it run for a couple hours and it never returned any results.

SQL Dude helped with some of this content
http://thesqldude.com/2012/05/15/monitoring-tempdb-space-usage-and-scripts-for-finding-queries-which-are-using-excessive-tempdb-space/

SELECT
SUM (user_object_reserved_page_count)*8/1024.0/1024.0 as user_obj_GB,
SUM (internal_object_reserved_page_count)*8/1024.0/1024.0 as internal_obj_GB,
SUM (version_store_reserved_page_count)*8/1024.0/1024.0 as version_store_GB,
SUM (unallocated_extent_page_count)*8/1024.0/1024.0 as freespace_GB,
SUM (mixed_extent_page_count)*8/1024.0/1024.0 as mixedextent_GB
FROM sys.dm_db_file_space_usage

Continuing to look into the issue, I kept seeing queries with this statement, Implicit_Transactions. The default for SQL Server is Set Implicit_Transactions off. Below is from Microsoft Books Online regarding this issue.


When ON, SET IMPLICIT_TRANSACTIONS sets the connection into implicit transaction mode. When OFF, it returns the connection to autocommit transaction mode.
When a connection is in implicit transaction mode and the connection is not currently in a transaction, executing any of the following statements starts a transaction:
ALTER TABLE
FETCH
REVOKE
BEGIN TRANSACTION
GRANT
SELECT
CREATE
INSERT
TRUNCATE TABLE
DELETE
OPEN
UPDATE
DROP


I wanted to see if there any active transations. This is tricky when using RCSI as sometime active transactions will not show up with the usual tools such as
DBCC opentran


The below query shows us active transactions and active transactions being used by RCSI.

select
t.transaction_id,t.name,t.transaction_type, t.transaction_state,
s.transaction_id,s.session_id,
s.elapsed_time_seconds/60/60.0 as hours_tran_has_been_open, p.status, p.cmd
from sys.dm_tran_active_transactions t
join sys.dm_tran_active_snapshot_database_transactions s
on t.transaction_id = s.transaction_id
join sys.sysprocesses p
on p.spid = s.session_id

If Implicit_Transactions is being set to ON and connections to the database are not being closed this will cause the version store to grow which causes TempDB to grow which will either fill the disk or cause performance issue being that the version store is so large.

Here is another great article on this

https://www.red-gate.com/simple-talk/sql/performance/read-committed-snapshot-isolation-high-version_ghost_record_count/
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40115318
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqq_2
кстати, непноятно почему она растет, если БД в реадонли...

например:
запрос читает большую таблицу, которую модифицируют на первичной реплике
при этом, версии читаемых данных переливаются в tempdb
...
Рейтинг: 0 / 0
А как посмотреть кто использует темпдб на read-only ноде в кластере?
    #40116439
qqq_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad,

большое спасибо!

вы очень помогли.
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / А как посмотреть кто использует темпдб на read-only ноде в кластере?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]