Дата  Запланированые курсы
30.07 Рисование на компьютере при помощи планшета (базовый курс)
30.07 Adobe After Effects. Создание анимации и эффектов
13.08 Средства векторной графики. Adobe Illustrator
27.08 Поисковая оптимизация (SEO)
03.09 Введение в тестирование программного обеспечения
10.09 DEV-J-MP+. Расширенная комплексная программа "Разработчик прикладного программного обеспечения (Язык Java)"
10.09 DEV-J10. Программирование на платформе Java. Введение в язык Java
10.09 MOC-20740B. Установка, Хранение и Вычисления с Windows Server 2016
10.09 Поисковая оптимизация (SEO) для профессионалов
10.09 DEV-J-CP. Комплексная программа "Разработчик прикладного программного обеспечения (Язык Java)"
10.09 Поисковая оптимизация (SEO) для профессионалов
10.09 Компьютерное проектирование в системе AutoCAD (базовый курс)
10.09 MOC-10985. Введение в базы данных SQL
10.09 Основы создания веб-сайтов. Adobe Dreamweaver
10.09 DEV-C22. Стандарт С++11, С++14, С++17 для прикладного программирования
17.09 MOC-20761. Создание запросов данных при помощи Transact-SQL
17.09 DEV-J20. Программирование на платформе Java. Стандартные пакеты
17.09 Средства растровой графики. Adobe Photoshop
24.09 DEV-J30. Программирование на платформе Java. Разработка многоуровневых приложений
24.09 MOC-20741B. Сетевая инфраструктура на основе Windows Server 2016
01.10 MOC-20762. Разработка баз данных SQL
01.10 Компьютерное проектирование в системе AutoCAD (базовый курс)
01.10 Профессиональная верстка сайтов. HTML5 и CSS3
01.10 DEV-С-CP+. Расширенная комплексная программа «Разработчик прикладного программного обеспечения (Языки С и C++)»
01.10 DEV-C10. Процедурное программирование. Языки С/C++
01.10 Основы алгоритмизации и программирования (Группа I)
01.10 Основы алгоритмизации и программирования (Группа II)
02.10 DEV-J-MP+. Расширенная комплексная программа "Разработчик прикладного программного обеспечения (Язык Java)"
02.10 DEV-J10. Программирование на платформе Java. Введение в язык Java
08.10 MOC-20764. Администрирование инфраструктуры баз данных SQL
08.10 MOC-20742B. Инфраструктура идентификации на основе Windows Server 2016
08.10 DEV-J60. Технологии разработки корпоративных приложений на платформе Java Enterprise Edition (Java EE)
08.10 Введение в тестирование программного обеспечения
08.10 QA-QAAB. Автоматизация тестирования ПО (Базовый курс)
15.10 Компьютерное проектирование в системе AutoCAD (профессиональный курс)
15.10 Средства векторной графики. Adobe Illustrator
15.10 DEV-OCPJP. Подготовка к сдаче сертификационных экзаменов серии Oracle Certified Professional Java Programmer
22.10 MOC-20744A. Безопасность инфраструктуры средствами Windows Server 2016
22.10 Введение в тестирование программного обеспечения
22.10 MOC-10987. Настройка производительности и оптимизация баз данных SQL
22.10 Основы создания веб-сайтов. Adobe Dreamweaver
24.10 NET-DLINKSW-LAB. Технологии коммутации современных сетей Ethernet. Лабораторный практикум
25.10 DEV-J20. Программирование на платформе Java. Стандартные пакеты
29.10 MOC-10961B. Автоматизация администрирования с Windows PowerShell
07.11 DEV-C20. Объектно-ориентированное программирование. Базовый уровень. Язык С++
12.11 Профессиональная верстка сайтов. HTML5 и CSS3
12.11 Компьютерное проектирование в системе AutoCAD (базовый курс)
19.11 DEV-J30. Программирование на платформе Java. Разработка многоуровневых приложений
26.11 Средства растровой графики. Adobe Photoshop
26.11 Поисковая оптимизация (SEO)
03.12 Компьютерное проектирование в системе AutoCAD (базовый курс)
03.12 DEV-C21. Объектно-ориентированное программирование. Углубленное изучение. Язык С++
10.12 Основы создания веб-сайтов. Adobe Dreamweaver
10.12 Поисковая оптимизация (SEO) для профессионалов
10.12 Средства векторной графики. Adobe Illustrator
17.12 Компьютерное проектирование в системе AutoCAD (профессиональный курс)
09.01 DEV-C22. Стандарт С++11, С++14, С++17 для прикладного программирования
14.01 DEV-OCPJP. Подготовка к сдаче сертификационных экзаменов серии Oracle Certified Professional Java Programmer
04.02 DEV-QT10. Прикладное программирование на С++ с использованием Qt. Базовый уровень
11.02 DEV-J60. Технологии разработки корпоративных приложений на платформе Java Enterprise Edition (Java EE)
11.03 Введение в тестирование программного обеспечения
11.03 Введение в тестирование программного обеспечения
Открыт набор на осенний семестр в Академию информатики для школьников Открыт набор на осенний семестр на программы второго высшего образования
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

ms sql приоритет чтения и записи
Shek
#1 Оставлено : 4 марта 2011 г. 23:06:15(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 09.02.2009(UTC)
Сообщений: 146
Баллов: 438
Откуда: Russia Питер

Здравствуйте!
Помогите, пожалуйста, решить задачку:
Есть сервер DELL R410, 24G RAM, двухпроцессорный.
Есть MS SQL Server 2008 R2 и создана БД, файлы данных которой лежат на отдельном жестком диске.
Включаю потоковую запись в эту базу в определенную таблицу, все отлично, пишет по 1000-1500 записей в секунду, очередей к диску нет, загрузки процессора и памяти тоже, ничего не мешает работе.
Но как только одновременно с записью я пытаюсь хотя бы одним клиентом считывать что-нибудь из этой же таблицы, то SQL сервер практически перестает писать в нее, скорость записи падает до считанных единиц, может десятков записей в секунду.
При этом мониторинг показывает, что очередей к дискам нет, оперативная память свободна, процессоры на 10%, ни по каким параметрам не достигнут предел производительности, такое ощущение, что SQL сервер искусственно ограничивает потоки на запись отдавая приоритет потокам на чтение, когда дело касается одной и той же таблицы...

Что самое странное рядом стоят два таких же сервера и работают хоть бы что, одновременно и пишут и читают, все как положено. Единственное не я устанавливал на них SQL, поэтому и вопрос - где в MS SQL настройки по части приоритетов ввода/вывода, чтения/записи?
Может что другое посоветуете?

Спасибо!
Реклама
Alexander.Kudakov
#2 Оставлено : 8 марта 2011 г. 18:06:25(UTC)
Ранг: Администратор

Группы: Администраторы, Модераторы, Зарегистрированные пользователи
Зарегистрирован: 15.12.2002(UTC)
Сообщений: 2,418
Баллов: 7,303
Откуда: Russia Санкт-Петербург

Поблагодарили: 4 раз в 4 постах
почитайте тут msdn.microsoft.co...s/library/ms181714.aspx про Query Hints и Table Hints - в зависимости от которых СУБД устанавливает блокировки на объекты.
Shek
#3 Оставлено : 10 марта 2011 г. 12:11:09(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 09.02.2009(UTC)
Сообщений: 146
Баллов: 438
Откуда: Russia Питер

Спасибо!
Продолжая первый вопрос - подскажите, пожалуйста, насколько эффективна следующая схема получения данных для решения задачи получения одних и тех же данных из разных источников при одновременном их чтении клиентами:

Для примера, есть два отдельных источника, например, два отдельных компьютера, которые по ODBC закачивают одни и те же данные в SQL сервер, иногда один может ненадолго отключаться, почти всегда между ними бывает какая-то небольшая разница во времени, то один быстрее, то другой.
Логика получения данных реализована так, что каждый источник пишет в одну свою временную таблицу (здесь и дальше речь идет об одной единственной базе), назовем их Buffer1 и Buffer2 соответственно. На каждой из этих двух таблиц работает триггер, который при поступлении порции данных пытается скопировать эту порцию в одну и ту же третью таблицу, например, DataHeap, при этом конечно сначала проверяет нет ли в ней уже того, что нужно скопировать (потому что запись идет от двух источников и неизвестно кто запишет раньше).
В свою очередь на таблице DataHeap тоже висит триггер и при поступлении данных, обрабатывает эти данные и закидывает их в обработанном виде во все очереди, которые нужно, а очередей столько, сколько подключившихся клиентов и каждый получает какую-то свою часть из обработанных данных.

триггеры на буферных таблицах написаны с инструкцией
INSERT dbo.DataHeap WITH ( TABLOCKX )
...
SELECT
...
FROM
...
WHERE NOT EXISTS (...)

Правильно ли принципиально организована схема?
Как нужно делать правильно?
Если вы хороший специалист по СУБД MS SQL с опытом администрирования MS SQL для специфичных задач, пишите мне в личку, нашей фирме очень нужен опытный знающий человек как минимум на платный консалтинг, а лучше на постоянную хорошую работу.
Alexander.Kudakov
#4 Оставлено : 10 марта 2011 г. 19:06:52(UTC)
Ранг: Администратор

Группы: Администраторы, Модераторы, Зарегистрированные пользователи
Зарегистрирован: 15.12.2002(UTC)
Сообщений: 2,418
Баллов: 7,303
Откуда: Russia Санкт-Петербург

Поблагодарили: 4 раз в 4 постах
Shek, с решением такой ad hoc задачи я врятли помогу. попробуйте поспращивать на спец-форумах.

могу пример из личного опыта:

ISA-сервер "умеет" писать лог в БД, причем протоколируется каждый полученный методом http/get объект.
был написан триггер который суммировал траффик полученный каждым пользователем (т.е. фактически задача такая же).
это было давно... аппаратная платформа была не самая быстрая. sql серверу было тяжело.
"проект" был закрыт но по другой причине...
Shek
#5 Оставлено : 11 марта 2011 г. 12:38:18(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 09.02.2009(UTC)
Сообщений: 146
Баллов: 438
Откуда: Russia Питер

Ну лан, спасибо и на том.
Shek
#6 Оставлено : 14 марта 2011 г. 16:23:11(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 09.02.2009(UTC)
Сообщений: 146
Баллов: 438
Откуда: Russia Питер

В продолжении разговора:

Объясните, пожалуйста, почему так происходит, что MS SQL server 2008 r2 при записи в, или чтении из одного файла данных одной базы, который лежит совсем один на физически отдельном жестком диске создает очередь к диску в 200-300, при этом время ответа держится в районе 300 мс.

Просто совсем не понятно почему возникают очереди, ведь файл на диске один единственный, при этом даже нет таких ситуаций когда одновременно идет и чтение и запись, только либо одно либо другое. К слову сказать, я делаю select count(*) from table with(nolock).

Очереди могут возникать, когда идет борьба за доступ к нескольким файлам на одном и том же диске, либо борятся несколько процессов за доступ к одному файлу, но тут один процесс sqlservr.exe, один запрос, один файл...
Специально и выносили отдельно, чтобы уйти от конкуренции за диск, а оно вон как. Может есть какие-нибудь ограничивающие настройки семого SQL сервера или здесь поможет ТОЛЬКО железный апгрейд с RAID полкой в 1000 IOPS'ов?
Alexander.Kudakov
#7 Оставлено : 15 марта 2011 г. 1:26:52(UTC)
Ранг: Администратор

Группы: Администраторы, Модераторы, Зарегистрированные пользователи
Зарегистрирован: 15.12.2002(UTC)
Сообщений: 2,418
Баллов: 7,303
Откуда: Russia Санкт-Петербург

Поблагодарили: 4 раз в 4 постах
вы задаете ООчень специфичный вопрос на которой могут ответить те кто занимается оптимизацией производительности ежедневно и на практике. поэтому лучше обратиться например вот сюда social.msdn.microsoft.com/Forums/en/sqldatabaseengine/threads
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.