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

Откуда:
Сообщений: 3422
Предыдущие несколько лет проработал над системой, имевшей очень похожие проблемы.

Не скажу за Snapshot TIL, но при включенном RCSI перестраивать индексы в онлайне настоятельно не рекомендую, ибо добавляемый 14-байтный Row Versioning ID к каждой строке оных делает их очень непривлекательными с точки зрения оптимизатора запросов. Особенно если индекс узкий, скажем int - вообще использоваться перестанет.
Но в остальном Read Committed Snapshot очень вкусная штука, попробуйте, вам может понравиться. Тем более, что оверхед реально копеечный, разве что TempDB просядет. Единственное - в некоторых, очень специфических ситуациях вам может не понравиться, что писатели никак не блокируют читателей, но хинтами это правится без проблем.

Как правильно сказал pkarklin, доступность БД вы не увеличите. Так что резервируйте окна обслуживания, выгоняйте всех к чертям из леса, накатывайте обновления и стартуйте. У вас же там не форекс и не HFT какой-нибудь, я надеюсь - иначе вы зря связались с реляционными БД, такие задачи решаются другими средствами.
30 янв 13, 21:00    [13853253]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Ennor Tiegael
при включенном RCSI перестраивать индексы в онлайне настоятельно не рекомендую, ибо добавляемый 14-байтный Row Versioning ID к каждой строке оных делает их очень непривлекательными с точки зрения оптимизатора запросов. Особенно если индекс узкий, скажем int - вообще использоваться перестанет


эм.. а можно подробнее? интересно!
но если "влоб" сравнивать разница - да - есть, но не такая фатальная
30 янв 13, 21:39    [13853384]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Ennor Tiegael
Member

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

Я точно помню, что впервые прочел об этом в BOL, но сейчас уже не найду. Вот первая ссылка из гугла: http://blogs.msdn.com/b/sqlprogrammability/archive/2009/05/18/why-did-the-size-of-my-indexes-expand-when-i-rebuilt-my-indexes.aspx
31 янв 13, 08:18    [13854421]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
gang
Member

Откуда:
Сообщений: 1394
Crimean
gang
Обычно под накатку апдейтов, да еще с изменением схемы объявляют регламент, клиентов от БД отваливают, план оката пишут и все такое...


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

Это конечно сильно упростило бы ТС жизнь, но "если" получается очень крупное. Кроме того у автора, насколько я понял, достаточно тяжкий процесс переподключения ПО к БД. Сомневаюсь что в этом случае удастся трюк с "незаметным переводом" его на работу со снапшотом вместо r/w БД, а потом обратно.
31 янв 13, 09:00    [13854559]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
gang
Member

Откуда:
Сообщений: 1394
alexeyvg
gang
пропущено...

Вообщето странноватая практика. Обычно под накатку апдейтов, да еще с изменением схемы объявляют регламент, клиентов от БД отваливают, план оката пишут и все такое... А тут нужно по-тихому "чтоб никто не догадался".
По моему нормальнвая практика, например, всякие яндексы и фейсбуки не "отваливают клиентов" на период регламентных работ.

И есть инфа 100% что они это делают средствами СУБД и с использованием технологий MS? =)
31 янв 13, 09:03    [13854570]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1938
Вижу пока что такие варианты:

1. включить recovery model full и настроить зеркало.

или

2. SNAPSHOT TIL - по этому поводу вопрос все же остался: как влияет Sch-M на читателей и писателей?

Сисадмин добавил дисков, так что места и на тот и на другой вариант должно хватить.

gang
Crimean
пропущено...


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

Это конечно сильно упростило бы ТС жизнь, но "если" получается очень крупное. Кроме того у автора, насколько я понял, достаточно тяжкий процесс переподключения ПО к БД. Сомневаюсь что в этом случае удастся трюк с "незаметным переводом" его на работу со снапшотом вместо r/w БД, а потом обратно.


в ридонли не перевести. к БД постоянный поток r/w. Даже ночью. Пока выходил из ситуации принудительным отсылом пользователей на тех.страницу.
31 янв 13, 09:37    [13854705]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
gang
Member

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

1) Зеркало не решит, т.к. на него транслируются все изменения основной БД , в т.ч. и изменения схемы и ребилд индексов - в общем все. Заркало - это полный эквивалент основной БД, доступ к которому возможен в лучшем случае на чтение (через создание снапшота). Да и не для этих целей оно придумано.

2) Одинаково. Лочит всех, даже читателей с nolock-ом. BOL:
The Database Engine uses schema modification (Sch-M) locks during a table data definition language (DDL) operation, such as adding a column or dropping a table. During the time that it is held, the Sch-M lock prevents concurrent access to the table. This means the Sch-M lock blocks all outside operations until the lock is released.

Some data manipulation language (DML) operations, such as table truncation, use Sch-M locks to prevent access to affected tables by concurrent operations.
31 янв 13, 10:29    [13854935]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Ennor Tiegael
Не скажу за Snapshot TIL, но при включенном RCSI перестраивать индексы в онлайне настоятельно не рекомендую, ибо добавляемый 14-байтный Row Versioning ID

Поправка: индексы в онлайне можно перестраивать и при выключенном на базе RCSI. 14-байтовый ID при этом всё равно добавляется, т.к. онлайновое перестроение индексов в любом случае неявно использует механизм версионности.
+ Тест перестроения индексов
SET NOCOUNT ON;
USE master;
GO
CREATE DATABASE Online_Index_Test;
ALTER DATABASE Online_Index_Test SET READ_COMMITTED_SNAPSHOT OFF;
ALTER DATABASE Online_Index_Test SET ALLOW_SNAPSHOT_ISOLATION OFF;

SELECT name, is_read_committed_snapshot_on, snapshot_isolation_state_desc
FROM sys.databases
WHERE name = N'Online_Index_Test';
GO
USE Online_Index_Test;
GO
CREATE TABLE dbo.Online_Index(id INT IDENTITY PRIMARY KEY);
BEGIN TRANSACTION;
GO
INSERT dbo.Online_Index DEFAULT VALUES;
GO 200000
COMMIT TRANSACTION;

CREATE INDEX IX_Online_Test ON dbo.Online_Index(id);

SELECT 'Pages used after index creation', SUM(used_pages)
FROM sys.allocation_units
WHERE type = 1 AND container_id IN (SELECT hobt_id FROM sys.partitions WHERE object_id = OBJECT_ID('dbo.Online_Index') AND index_id = 2)

ALTER INDEX IX_Online_Test ON dbo.Online_Index REBUILD WITH (ONLINE = ON);

SELECT 'Pages used after online index rebuild', SUM(used_pages)
FROM sys.allocation_units
WHERE type = 1 AND container_id IN (SELECT hobt_id FROM sys.partitions WHERE object_id = OBJECT_ID('dbo.Online_Index') AND index_id = 2)

ALTER INDEX IX_Online_Test ON dbo.Online_Index REBUILD WITH (ONLINE = OFF);
SELECT 'Pages used after offline index rebuild', SUM(used_pages)

FROM sys.allocation_units
WHERE type = 1 AND container_id IN (SELECT hobt_id FROM sys.partitions WHERE object_id = OBJECT_ID('dbo.Online_Index') AND index_id = 2)
GO
/*
USE master;
GO
DROP DATABASE Online_Index_Test;
*/
31 янв 13, 10:36    [13854974]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Гость333
Member

Откуда:
Сообщений: 3683
gang
2) Одинаково. Лочит всех, даже читателей с nolock-ом.

Другое дело, что Sch-M будет реже накладываться. Собственно, когда будут долгие Sch-M блокировки, кроме офлайн-ребилда и офлайн-создания индексов? Добавление в большую таблицу столбца с дефолтным значением? Смена длины столбца с типом char(x) на тип char(y)? Вроде до такого не должно доходить на нормальной системе :)
31 янв 13, 10:41    [13855014]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1938
gang
Shurgenz,

1) Зеркало не решит, т.к. на него транслируются все изменения основной БД , в т.ч. и изменения схемы и ребилд индексов - в общем все. Заркало - это полный эквивалент основной БД, доступ к которому возможен в лучшем случае на чтение (через создание снапшота). Да и не для этих целей оно придумано.

[/src]


а как же

Improves the availability of the production database during upgrades.
To minimize downtime for a mirrored database, you can sequentially upgrade the instances of SQL Server that are participating in a database mirroring session. This will incur the downtime of only a single failover. This form of upgrade is known as a rolling upgrade. For more information, see How to: Install a Service Pack on a System with Minimal Downtime for Mirrored Databases.

вот отсюда
31 янв 13, 10:52    [13855107]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Glory
Member

Откуда:
Сообщений: 104751
Shurgenz
а как же

Improves the availability of the production database during upgrades.
To minimize downtime for a mirrored database, you can sequentially upgrade the instances of SQL Server that are participating in a database mirroring session. This will incur the downtime of only a single failover. This form of upgrade is known as a rolling upgrade. For more information, see How to: Install a Service Pack on a System with Minimal Downtime for Mirrored Databases.

Не надо путать "upgrade the instances" с "апгрейдом базы"
31 янв 13, 10:53    [13855126]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Shurgenz
а как же

Improves the availability of the production database during upgrades.
To minimize downtime for a mirrored database, you can sequentially upgrade the instances of SQL Server that are participating in a database mirroring session.

Между понятиями "апгрейд БД" и "апгрейд сервера БД" есть существенная разница.
31 янв 13, 10:54    [13855137]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Crimean
Member

Откуда:
Сообщений: 13147
gang
у автора, насколько я понял, достаточно тяжкий процесс переподключения ПО к БД. Сомневаюсь что в этом случае удастся трюк с "незаметным переводом" его на работу со снапшотом вместо r/w БД, а потом обратно.


а это можно обойти небольшим надругательством над зеркалированием, я думаю
31 янв 13, 12:15    [13855843]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
gang
alexeyvg
пропущено...
По моему нормальнвая практика, например, всякие яндексы и фейсбуки не "отваливают клиентов" на период регламентных работ.

И есть инфа 100% что они это делают средствами СУБД и с использованием технологий MS? =)
Да, нокоторые с "использованием технологий MS", ну а средствами СУБД - конечно, в СУБД нет кнопки "сделать хорошо", писать программы приходится самому.

Ну и речь шла о другом: вы говорите, что единственно правильным (независимо от используемой технологии) является "Обычно под накатку апдейтов, да еще с изменением схемы объявляют регламент, клиентов от БД отваливают, план оката пишут и все такое".

Я с этим не соглашусь, накат изменений в очень многих проектах (в тех, где это требовалось) делали без остановки системы, для этого вообще не нужно делать чего то эпохального, просто чуть чуть желания, это делается даже для примитивной системы клиент-сервер с одним сервером СУБД, так что вопрос ТС мне не совсем понятен.

Вот для замены без остановки обслуживания СХД, серверов, версий СУБД и т.п. нужна уже более продвинутая архитектура.
31 янв 13, 12:43    [13856033]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
gang
Member

Откуда:
Сообщений: 1394
Crimean
gang
у автора, насколько я понял, достаточно тяжкий процесс переподключения ПО к БД. Сомневаюсь что в этом случае удастся трюк с "незаметным переводом" его на работу со снапшотом вместо r/w БД, а потом обратно.


а это можно обойти небольшим надругательством над зеркалированием, я думаю

Любопытно. Разовьете мысль?
31 янв 13, 14:12    [13856964]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Crimean
Member

Откуда:
Сообщений: 13147
gang
Любопытно. Разовьете мысль?


это говорилось только в свете обеспечения на время обновления работы системы в рид-онли
зеркалирование "позволяет" клиентам автоматически переключаться с основного на зеркало и обратно
31 янв 13, 14:27    [13857097]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
gang
Member

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

Но зеркальную БД в рид-онли открыть можно только создав снапшот, а это уже отдельная БД для провайдера, не?
Или вы имели в виду рестор зеркальной БД with standby? Но для этого потребуется зеркало развалить...
31 янв 13, 14:49    [13857329]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
gang
Member

Откуда:
Сообщений: 1394
alexeyvg
gang
пропущено...

И есть инфа 100% что они это делают средствами СУБД и с использованием технологий MS? =)
Да, нокоторые с "использованием технологий MS", ну а средствами СУБД - конечно, в СУБД нет кнопки "сделать хорошо", писать программы приходится самому.

Прекрасно, тогда поделитесь плз. этой инфой. Как например в рамках MS на уровне СУБД реализуется внесение изменение в схему таблицы, выполняющееся для примера 1 час, без влияния на пользователей.
alexeyvg
Ну и речь шла о другом: вы говорите, что единственно правильным (независимо от используемой технологии) является "Обычно под накатку апдейтов, да еще с изменением схемы объявляют регламент, клиентов от БД отваливают, план оката пишут и все такое".

Относительно технологий: во-первых слов "независимо от используемой технологии" ни в одном моем посте нет, а во-вторых обратите внимание на название форума - тут обсуждаются вопросы по MSSQL.
alexeyvg
Я с этим не соглашусь, накат изменений в очень многих проектах (в тех, где это требовалось) делали без остановки системы, для этого вообще не нужно делать чего то эпохального, просто чуть чуть желания, это делается даже для примитивной системы клиент-сервер с одним сервером СУБД, так что вопрос ТС мне не совсем понятен.

Ну с этим то никто и не спорил. Для примитивной системы и тему поднимать не стоит. Но кроме них есть и другие, для которых плановый простой на час лучше внезапного на 5 минут или для которых в принципе недопустимо обращение пользователей к БД во время апдейта из-за риска получить несогласованные данные, так что мне например вопрос ТС вполне понятен.

Оффтоп: фраза про "чуть чуть желания" напомнила процесс приготовления феей-крестной зелья в Шреке =)
31 янв 13, 15:04    [13857491]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
gang
Прекрасно, тогда поделитесь плз. этой инфой. Как например в рамках MS на уровне СУБД реализуется внесение изменение в схему таблицы, выполняющееся для примера 1 час, без влияния на пользователей.
А зачем вносить такие изменения?
31 янв 13, 15:22    [13857644]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
gang
Member

Откуда:
Сообщений: 1394
Гавриленко Сергей Алексеевич,
Ну так ведь автор изменения и тот, кто должен будет применять его на БД, далеко не всегда одно и тоже лицо и не всегда есть возможность на этого самого автора влиять. К тому же вопрос был о технической реализуемости беспростойной накатки обновы на БД. Пример может и грубоват, но как иллюстрация вполне... Бывает и хуже.
31 янв 13, 17:30    [13858267]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
gang
Прекрасно, тогда поделитесь плз. этой инфой. Как например в рамках MS на уровне СУБД реализуется внесение изменение в схему таблицы, выполняющееся для примера 1 час, без влияния на пользователей.
Если такое требование - заблокировать таблицу на час, то конечно никак :-)

Вы приведите пример бизнес-требования, ради которого нужно было заблокировать таблицу на час, посмотрим, можно ли этого как нибуть избежать

Я делал изменение модели БД для одной крупной системы, меняли ИД(ПК) с гуид на бигинт, апдэйт шёл месяц, и пользователи этого даже не заметили. Это конечно крайний случай, обычно всё не так плохо, и не требует особых извращений.
gang
alexeyvg
Ну и речь шла о другом: вы говорите, что единственно правильным (независимо от используемой технологии) является "Обычно под накатку апдейтов, да еще с изменением схемы объявляют регламент, клиентов от БД отваливают, план оката пишут и все такое".

Относительно технологий: во-первых слов "независимо от используемой технологии" ни в одном моем посте нет, а во-вторых обратите внимание на название форума - тут обсуждаются вопросы по MSSQL.
Я имел в виду, что принципы тут применяются везде одинаковые, хоть это mssql, хоть оракл, хоть кеш, или база на текстовых файлах - всегда можно подобрать такую цепочку изменений, которая не будет прерывать обслуживание.
31 янв 13, 17:40    [13858327]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
gang
Гавриленко Сергей Алексеевич,
Ну так ведь автор изменения и тот, кто должен будет применять его на БД, далеко не всегда одно и тоже лицо и не всегда есть возможность на этого самого автора влиять. К тому же вопрос был о технической реализуемости беспростойной накатки обновы на БД. Пример может и грубоват, но как иллюстрация вполне... Бывает и хуже.
Если есть требования безостановочных изменений структуры, то и меняться она должна соответствующим образом. Просто так взять и выполнить за две секунды скрипт, который лочит таблицу на неделю, не выйдет.

Сообщение было отредактировано: 31 янв 13, 18:44
31 янв 13, 17:49    [13858407]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
gang
Гавриленко Сергей Алексеевич,
Ну так ведь автор изменения и тот, кто должен будет применять его на БД, далеко не всегда одно и тоже лицо и не всегда есть возможность на этого самого автора влиять. К тому же вопрос был о технической реализуемости беспростойной накатки обновы на БД. Пример может и грубоват, но как иллюстрация вполне... Бывает и хуже.
Ответственность лежит всегда на авторе, при чём тут "применяющий"?

Разумеется, автор изменений всенда может написать такие изменения, которые сделают необходимым остановку обслкживания, и накакие меры со стороны применяющего этому помешать не смогут.

В этом смысле все обсуждения в этой теме бессмысленны, без соответствующих действий автора изменений остановки не избежать никаким способом.
31 янв 13, 18:43    [13858800]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Ennor Tiegael
Не скажу за Snapshot TIL, но при включенном RCSI перестраивать индексы в онлайне настоятельно не рекомендую, ибо добавляемый 14-байтный Row Versioning ID к каждой строке оных делает их очень непривлекательными с точки зрения оптимизатора запросов. Особенно если индекс узкий, скажем int - вообще использоваться перестанет.
По поводу оптимизатора, звучит очень неправдоподобно. Доказательства будут?
31 янв 13, 23:31    [13859688]     Ответить | Цитировать Сообщить модератору
 Re: подскажите способ заставить сервер работать 24/7  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Mind
Ennor Tiegael
Не скажу за Snapshot TIL, но при включенном RCSI перестраивать индексы в онлайне настоятельно не рекомендую, ибо добавляемый 14-байтный Row Versioning ID к каждой строке оных делает их очень непривлекательными с точки зрения оптимизатора запросов. Особенно если индекс узкий, скажем int - вообще использоваться перестанет.
По поводу оптимизатора, звучит очень неправдоподобно. Доказательства будут?
Как вы себе это представляете? :) Я смотрел статистику использования индексов, она показывала, что даты последних обращений к таким индексам примерно совпадали с датой их онлайн-перестроений.

Ну сами подумайте, у вас узкая но довольно большая таблица - скажем, 15 гигов при ширине 25-30 байт. Некластерный индекс на интовое поле при интовом ПК имеет ширину 8 байт, после онлайн-перестроения он становится 8+14=22 байта. При этом точечные выборки по нему не осуществляются, вытягивается всегда "простыня" из нескольких тысяч или десятков тысяч строк. В результате сервер выбирает сканирование кластерника, и все ложится...
1 фев 13, 09:07    [13860188]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить