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

Откуда:
Сообщений: 198
Хочу дать доступ в базу MS SQL Server 2017 доступ пользователям, чьи запросы я не смогу контролировать.
Можно ли для конкретной учётки/роли указать что все запросы (разрешён только SELECT), которые выполняются от имени данной учётки, выполняются только в неблокирующем режиме?
Также интересует, можно ли для конкретной учётки задать таймаут запросов, чтобы по истечении определённого времени они просто останавливались?
22 июн 18, 08:45    [21511554]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Max_11111,

Нет. Просто включите RCSI и забудьте про ваше грязное чтение
22 июн 18, 08:58    [21511593]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
Max_11111
Member

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

RCSI больше подходит для OLTP систем с множеством коротких транзакций. У меня же хранилище данных, а к нему RCSI применять не рекомендуется из-за наличия длительных транзакций. Спасибо за ответ, я потестирую, попробую применить данную технологию к своей базе и посмотреть что получится
22 июн 18, 10:10    [21511958]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
[quot Max_11111]TaPaK,

автор
RCSI больше подходит для OLTP систем с множеством коротких транзакций.
нет
22 июн 18, 10:25    [21512015]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Max_11111
Можно ли для конкретной учётки/роли указать что все запросы (разрешён только SELECT), которые выполняются от имени данной учётки, выполняются только в неблокирующем режиме?
Также интересует, можно ли для конкретной учётки задать таймаут запросов, чтобы по истечении определённого времени они просто останавливались?

А может просто разобраться что тормозит и лочит ? И переписать по людски ?
22 июн 18, 10:47    [21512152]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1663
Maxx
Max_11111
Можно ли для конкретной учётки/роли указать что все запросы (разрешён только SELECT), которые выполняются от имени данной учётки, выполняются только в неблокирующем режиме?
Также интересует, можно ли для конкретной учётки задать таймаут запросов, чтобы по истечении определённого времени они просто останавливались?

А может просто разобраться что тормозит и лочит ? И переписать по людски ?


Так запросы-то не его. Другой вопрос, что проанализировать отсутствующие индексы всегда можно.
И кстати, Resourse Governor тут не поможет?
22 июн 18, 12:09    [21512604]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
DaniilSeryi
Maxx
пропущено...

А может просто разобраться что тормозит и лочит ? И переписать по людски ?


Так запросы-то не его. Другой вопрос, что проанализировать отсутствующие индексы всегда можно.
И кстати, Resourse Governor тут не поможет?

главное слово ресурс. И DDL logon тоже не поможет
22 июн 18, 12:26    [21512695]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
Max_11111
Member

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

Все известные запросы оптимизированы, проблемы могут возникнуть только с неконтролируемыми запросами, написанными пользователями. В этом случае я не знаю к каким таблицам и с какими запросами они обратятся. И я не могу наложить индексы на каждую комбинацию всех полей всех таблиц. А в базе есть таблицы с сотнями миллионов строк, к которым даже максимально оптимизированные запросы подтормаживают.
Соответственно в идеале, чтобы не повесить систему, необходимо иметь механизм контроля, который будет:
1. Выполнять запросы этих пользователей с минимальным приоритетом, не блокируя ресурсы для других (важных) запросов
2. отрубать долгие запросы
25 июн 18, 03:50    [21517571]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
Владислав Колосов
Member

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

вы можете создать моментальный снимок базы для таких пользователей, но это связано с некоторым снижением дисковой производительности и требует Enterprise редакции, если не ошибаюсь.
25 июн 18, 13:05    [21518405]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
Eleanor
Member

Откуда:
Сообщений: 2618
Max_11111
2. отрубать долгие запросы

С этим у вас, наверное, нет никаких сложностей:
настроить раз в N минут джоб, который ищет запросы дольше N минут от указанных пользователей, отправляет вам на почту отчет, что данные долгие запросы были прерваны, и выполняет kill для всех session_id из списка.
SELECT S.login_name,
    S.host_name,
    R.session_id,
    R.start_time,
    DATEDIFF(MINUTE, R.start_time, GETDATE()) AS DurationMinutes,
    T.text
FROM sys.dm_exec_requests R
JOIN sys.dm_exec_sessions S ON R.session_id = S.session_id
CROSS APPLY sys.dm_exec_sql_text (R.sql_handle) T
WHERE login_name IN {список пользователей}
    AND DATEDIFF(MINUTE, R.start_time, GETDATE()) >= {максимальное время выполнения}
25 июн 18, 13:39    [21518522]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1663
В общем, читаем про Resourse Governor:

[url=]https://blog.sqlauthority.com/2012/06/04/sql-server-simple-example-to-configure-resource-governor-introduction-to-resource-governor/[/url]

Max_11111
Соответственно в идеале, чтобы не повесить систему, необходимо иметь механизм контроля, который будет:
1. Выполнять запросы этих пользователей с минимальным приоритетом, не блокируя ресурсы для других (важных) запросов


А для
Max_11111
2. отрубать долгие запросы

можно рассмотреть нижеприведённый вариант. Но тут не будет сортировки по логинам, так что могут пострадать и "свои" пользователи/запросы.

Tip: Use the Query Governor to Control Excessive Query Execution

The query governor does not allow the execution of any query that has a running time that exceeds a specified query cost. The query cost is the estimated time, in seconds, required to execute a query, and it is estimated prior to execution based on an analysis by the query engine. By default, the query governor is turned off, meaning there is no maximum cost. To activate the query governor, complete the following steps:
1. In the Server Properties dialog box, go to the Connections page.
2. Select the option Use Query Governor To Prevent Long-Running Queries.
3. In the box below the option, type a maximum query cost limit. The valid range is 0 through 2,147,483,647. A value of 0 disables the query governor; any other value sets a maximum query cost limit.
4. Click OK.
With sp_configure, the following Transact-SQL statement will activate the query governor:
exec sp_configure "query governor cost limit", <limit>
You can also set a per-connection query cost limit in Transact-SQL using the following statement:
set query_governor_cost_limit <limit>
Note Before you activate the query governor, you should use the Query view to estimate the cost of current queries you are running on the server. This will give you a good idea of a value to use for the maximum query cost. You can also use the Query view to optimize queries.
25 июн 18, 13:49    [21518553]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
DaniilSeryi,

а вы точно понимаете разницу между долго и дорого?
25 июн 18, 14:02    [21518605]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1663
TaPaK
DaniilSeryi,

а вы точно понимаете разницу между долго и дорого?


Вы про "query cost"?
В данном случае это the estimated time, in seconds, required to execute a query.
25 июн 18, 14:07    [21518629]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
DaniilSeryi
TaPaK
DaniilSeryi,

а вы точно понимаете разницу между долго и дорого?


Вы про "query cost"?
В данном случае это the estimated time, in seconds, required to execute a query.

так суть то одна и таже, оценивается стоимость запроса и для обывателя переводится во время для его конфигурации
25 июн 18, 14:26    [21518699]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
Eleanor
Member

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

ТС хотел, чтобы запросы останавливались после N секунд работы, а не в принципе не запускались на выполнение:
The query cost is the estimated time, in seconds, and it is estimated prior to execution based on an analysis by the query engine.

Для интереса попробовала, как работает данный функционал. Задала порог в 26 секунд и запустила у себя тестовый запрос (subtree cost был 46) - успешно отработал 5 минут. Все-таки оценка времени выполнения у оптимизатора может быть очень грубой.
select top 10000000 *
from sys.columns  A
cross apply sys.columns B
cross apply sys.columns C
25 июн 18, 14:27    [21518702]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
Eleanor
Member

Откуда:
Сообщений: 2618
У меня какая-то проблема с сервером:
настройка на уровне сервера sp_configure 'query governor cost limit', 26 почему-то не работает. Reconfigure, рестарт инстанса ничего не дает.

Зато опция работает на уровне отдельного соединения set query_governor_cost_limit 26, и запрос при попытке запуска сразу дает ошибку
The query has been canceled because the estimated cost of this query (46) exceeds the configured threshold of 26

Т.е все-таки query governor cost limit - это estimated cost из плана, а не estimated time в секундах, что бы ни говорила документация.
26 июн 18, 00:49    [21520344]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
Eleanor
Member

Откуда:
Сообщений: 2618
Eleanor
настройка на уровне сервера sp_configure 'query governor cost limit', 26 почему-то не работает. Reconfigure, рестарт инстанса ничего не дает

Не обратила внимания на настройки ssms - там 0, и они переписывают серверные. Все нормально.
26 июн 18, 01:02    [21520350]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
Max_11111
Member

Откуда:
Сообщений: 198
[quot DaniilSeryi]В общем, читаем про Resourse Governor:

[url=]https://blog.sqlauthority.com/2012/06/04/sql-server-simple-example-to-configure-resource-governor-introduction-to-resource-governor/[/url]
[quot]
Спасибо за ссылку. Думаю так и сделаю

Eleanor
Max_11111
2. отрубать долгие запросы

С этим у вас, наверное, нет никаких сложностей:
настроить раз в N минут джоб, который ищет запросы дольше N минут от указанных пользователей, отправляет вам на почту отчет, что данные долгие запросы были прерваны, и выполняет kill для всех session_id из списка.
SELECT S.login_name,
    S.host_name,
    R.session_id,
    R.start_time,
    DATEDIFF(MINUTE, R.start_time, GETDATE()) AS DurationMinutes,
    T.text
FROM sys.dm_exec_requests R
JOIN sys.dm_exec_sessions S ON R.session_id = S.session_id
CROSS APPLY sys.dm_exec_sql_text (R.sql_handle) T
WHERE login_name IN {список пользователей}
    AND DATEDIFF(MINUTE, R.start_time, GETDATE()) >= {максимальное время выполнения}

Была схожая идея, но с другим способом получения информации. Ваш запрос лучше подходит для этого, спасибо.
26 июн 18, 09:00    [21520550]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4364
TaPaK
Max_11111,

Нет. Просто включите RCSI и забудьте про ваше грязное чтение


Вот так просто возьмите и включите. А вы в курсе, что есть несовместимые с RCSI запросы.
26 июн 18, 10:44    [21521042]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
a_voronin
TaPaK
Max_11111,

Нет. Просто включите RCSI и забудьте про ваше грязное чтение


Вот так просто возьмите и включите. А вы в курсе, что есть несовместимые с RCSI запросы.

просвящайте.
26 июн 18, 10:49    [21521064]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
Критик
Member

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

как вариант, можно рассмотреть разделение системы на 2 слоя: расчетный и витрины (по сути - зеркало)
26 июн 18, 10:58    [21521120]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
Eleanor
Member

Откуда:
Сообщений: 2618
TaPaK
a_voronin
А вы в курсе, что есть несовместимые с RCSI запросы.

просвящайте.

+1
Тоже интересно, с учетом того, что MS сделал этот уровень дефолтным в Азуре.
26 июн 18, 11:37    [21521356]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Eleanor
TaPaK
пропущено...

просвящайте.

+1
Тоже интересно, с учетом того, что MS сделал этот уровень дефолтным в Азуре.

3й год живу с RSCI, хочу всё знать.
Может быть расхождения с требованиями бизнес-логики, но прям несовместимые запросы...
26 июн 18, 11:40    [21521373]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
Max_11111
Member

Откуда:
Сообщений: 198
Критик
Max_11111,

как вариант, можно рассмотреть разделение системы на 2 слоя: расчетный и витрины (по сути - зеркало)

В планах добавить второй сервер, прикрутить синхронизацию (возможно через AlwaysOn), и настроить один сервер на запись и обработку данных, а другой - на чтение. но пока это планы
26 июн 18, 11:51    [21521422]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли для конкретного пользователя задать режим грязного чтения?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4364
Eleanor
TaPaK
пропущено...

просвящайте.

+1
Тоже интересно, с учетом того, что MS сделал этот уровень дефолтным в Азуре.


Азуре совершенно другая база, где нет многого к чему привыкли.

На обычном SQL Server не работает обновление колумнсторов под RSCI на 2014, DDL операции внутри транзакций и был список из других фич. В общем, полной совместимости, чтобы вот так взять и переключить не тестируя сначала -- нет.
26 июн 18, 17:59    [21522962]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить