Как правильно настроить MS SQL сервер для работы с 1С




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

97 Comments

  1. larisab

    Спасибо, полезно!

    Reply
  2. Sindelik

    Спасибо, то что надо!

    Reply
  3. German
    Также желательно делать полную переиндексацию, с блокировкой БД

    При индексации блокируется только таблица, незачем делать ее в режиме тестирования и исправления.

    Reply
  4. luns

    Еще бы добавил, что неплохо было бы выставить в свойствах сетевого соединения сервера для компоненты «Служба доступа к файлам и принтерам сети Microsoft» оптимизацию не для файлов а для сетевых приложений.

    Reply
  5. Saint

    Нифига не понял в формуле расчёта максимального количества памяти.

    Reply
  6. quick

    Полезная статья. Но в расчет памяти я что то тоже не врублюсь

    Reply
  7. anderson

    С какой целью делается DBCC SHRINKFILE (N'<ИмяБД>_log’ , 0), если у вас recovery model = simple?

    Reply
  8. Androsovych

    Время выполнения операций, заявленное в обзоре, сильно зависит от размера самой базы; переиндексация на базах больше сотни Гб может длиться дольше часа.

    Reply
  9. a-novoselov

    (8) Вот поэтому она и сделана на ночь с воскресения на понедельник с 01:00… Люди начнут работать все равно не раньше 08:00

    Reply
  10. a-novoselov

    (5) (6) Добавил пример.

    Reply
  11. a-novoselov

    (7) Были преценденты, что лог не урезался, решили добавить ручное «обрезание».

    Reply
  12. anderson

    (11) а зачем вообще урезание? чем меньше операций по выделению места под файлы данных/лога, тем меньше тормозов

    Reply
  13. Saint

    А что такое «Общее количество памяти сервера»? Это размер ОЗУ? Но цифра в примере непонятная.

    Reply
  14. a-novoselov

    (12) Лог, без урезания, начинает сильно фрагментироваться (куча маленьких свободных/занятых кусков внутри файла), что негативно сказывается на работе.

    (13) Да, это размер ОЗУ.

    Reply
  15. Saint

    (14) Формула интересная, только вот по ней у меня на сервере нужно установить значение -1 ГБ (т.е. отрицательное значение). 😥

    Reply
  16. a-novoselov

    (15) Во-первых ваша ссылка для 7ки (кстати тоже неоднократно посещалась при поиске информации), во вторых никакого геморроя с восстановлением — раз в 2 дня в тестовую базу восстанавливаем: 20 минут из полного файла, 15 минут из diff файла и готовая база примерно на час отстающая от рабочей. А вот при полной модели бэкапа (full а не simple), какраз имеете огромный геморой с восстановлением, т.к. если лог натянете на полный бэкап, то diff не встанет, если diff натянете, то лог не встанет… целостность базы нарушена полюбому. А в simple-модели бэкап лога не нужен.

    (16) Если у вас rphost’ы максимум по 500 МБ отъедают памяти в процессе работы, то столько им и оставляйте. Сдесь взято по максимуму и у нас они действительно по столько иной раз занимают (правда не видал, когда все одновременно, но чем чорт не шутит…)

    Reply
  17. _Z1

    Помимо размера и log рабочей базы

    необходимо также настраивать размер и log базы tempdb

    Размер этой базы должен составлять от 25% до 40% самой большой базы данных

    Лучший вариант размещения базы данных tempdb – на отдельном диске или дисковом массиве RAID0 (эта база данных не нуждается в восстановлении).

    Приращение лога для temdb — обязательно не в процентах.

    Reply
  18. _Z1

    Про Максимальное количество потоков ставим 4096 ИХМО вы что-то перемудрили.

    Ставя явно 4096 Вы резервируете для sql сервера пул рабочих процессов.

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

    Т.е если к примеру у Вас общее число подключений к серверу меньше 2000 то 4096

    ставить неправильно так как каждый рабочий поток резервирует память ( об этом косвенно говорит и тот факт что для изменения параметра нужна перестартовать sql сервер).

    Как действует значение 0 точно не скажу это надо отдельно разбираться взависимости от

    (select @@version) версии sql (2000,2005,2008)

    Reply
  19. a-novoselov

    (18) Насчет размещени tempdb вы абсолютно правы, а вот насчет размера — это довольно спорный вопрос… одно время, еще на старом сервере с небольшим объемом оперативы когда работали, у нас для базы в 6 ГБ tempdb разростался до 30 ГБ, и когда мы решили ограничить размер tempdb до 6 ГБ, то при достижении указанного размера сервер просто вставал, спасал только полный ребут. а без ограничения кое-как работал, правда тормозил неподетски. Вообще конечно продукты MS очень требовательны к ресурсам и очень часто первоопределяющий фактор — быстродействие сервера и наличие рэйда.

    Reply
  20. a-novoselov

    (19) Возможно число можно указать и поменьше, но памяти процессы резервируют по минимуму и не факт, что стартуют при отсутствии подключений, а вот когда 2 подключения на один поток садятся, то у людей начинаются ториоза, ИМХО число лучше сразу задать как можно больше. Темболее ожидается увеличение количества пользователей до 400-500 человек, и каждый ведь может по несколько раз 1С запустить… + регламентные задания, роботы всякие и т.п.

    Reply
  21. _Z1

    (20) насчет размера согласен.

    Просто эта цифра 25-40% это как общая рекомендация.

    Точное значение надо подбирать индивидуально для каждого сервера.

    Если есть какая нибудь методика то с удовольствием с ней познакомился бы.

    Тут как всегда компромис чем больше размер тем лучше. Но дисковое пространство сервера как правило очень дорогой ресурс и его надо как-то ограничивать.

    Как выставлять приращение log для tempdb точно не знаю но желательно чтобы sql

    делал это редко.

    Reply
  22. _Z1

    (21) Если пользователь запустил несколько сессий то не факт что он в них одновременно работает. Т.е если у Вас 95% времени выполняется 2000 активных соеденений ( которые что-то считают ) то и выставлять надо 2000. Выставляя 4096 Вы отбираете у sql сервера память и он не сможет её(память) использовать под свои задачи.

    Я исхожу из своих знаний на основе sql200,sql2005 Как резервируется память

    под это дело в sql2008 я точно не знаю ( думаю что также)

    Также надо учитывать и возможности сервера.Предположим что конкретный сервер не может одновременно обслуживать более 3000 потоков. В таком случае ставить 4096 тоже бессмысленно.

    Про значение 0

    В sql2000 это равно 255 рабочим потокам

    В sql2005 ( и наверное sql2008 ) 0 означает что sql сервер сам по внутреним алгоритмам динамически меняет количество рабочих процессов. Для каких то нагрузок это может и хорошо для каких-то не очень хорошо.

    При любых других (не 0 ) значениях я считаю что память под рабочие процессы выделяется статически при старте sql сервера.

    Reply
  23. sound

    полезные штуки

    Reply
  24. a-novoselov

    (24) Кстати SQL умеет распараллеливать запросы, т.е. 1 большой запрос может идти в несколько потоков.

    Reply
  25. _Z1

    (25) это тоже надо настраивать отдельным параметром

    и как правило не рекомендуют ставить значение больше 5.

    Фишка в том что при большом распаралеливании sql начинает слишком много времени тратить на само планирование и разбиение запроса вместо его выполнения

    и общая производительность падает вместо ожидаемого роста.

    Reply
  26. a-novoselov

    (26) Да, мы тоже сперва MaxParallelism в 5 выставили, но с 0 на замерах производительности большие запросы быстрее обрабатывались…

    Reply
  27. glinmn

    Хи-ха, Я работаю с базами от 40 -120Gb и я посмотрел бы с удовольствием на Ваши действия при падении Log файла или файла базы. Все это очень хорошо при небольших базах , но они имеют дурную привычку быстро расти и при этом начинаются другие проблемы

    Reply
  28. Dimka74

    Все здорово, осталось только видео сделать и на Ютруб выложить. 😉

    Reply
  29. Gilev.Vyacheslav

    Boost priority — что дает?

    Сервер 1С находится вместе с сиквелом?

    почему минимум = 0?

    наверно слишком пафосно «правильная настройка», скорее «настройка для случая Х»

    еще многе зависит от операционки, разрядности и т.п.

    вцелом труд в правильном направлении сделан, хотя некоторые выводы необоснованы

    Reply
  30. a-novoselov

    (30) Boost priority — увеличивает приоритет сервера.

    Да, сейчас 1С и SQL вместе находятся. До недавнего времени на разных машинах висели, но настройки оптимальные были такими-же…При переносе SQL на сервер, где 1С вращается, производительность чуть-чуть возросла, хотя сервера были по мегабитному каналу связаны.

    Насчет разрядности вы правы, на 32х все равно больше 4 ГБ оперативы не увидит операционка, и тут уже смысла нет память ограничивать, или 3-3,5 ГБ ограничение ставить, т.к. ее итак нет.

    Reply
  31. a-novoselov

    (28) Может поделитесь какие проблемы могут возникнуть?

    Файл базы у нас падал, и мы его никак не смогли восстановить. Пришлось поднимать базу из бэкапа, перед этим скопировав базу с логом на тестовый сервер… Для аттача этой базы никакие шаманские действия не помогли. Скачал утилиту от MS, которая, типа, битые базы поднимает, она за неделю 50% файла обработала, при том на каждой второй операции сообщала об ошибке… Остановил процесс за ненадобностью.

    Reply
  32. echo77

    (31)

    Насчет разрядности вы правы, на 32х все равно больше 4 ГБ оперативы не увидит операционка, и тут уже смысла нет память ограничивать, или 3-3,5 ГБ ограничение ставить, т.к. ее итак нет.

    — в этом вы не правы. Серверная x32 ОС видит больше 4 Гб памяти, для того чтобы SQL-сервер мог адресоваться к памяти выше 4 Гб необходимо включить AWE (см. скриншот 1)

    Reply
  33. a-novoselov

    (33) Там страницы по 4 ГБ получаются и обращение к памяти медленно работает. Смысла нет 32х разрядную ось ставить на сервер, где больше 4 ГБ памяти.

    Reply
  34. echo77

    (34) никто не спорит, но и писать что операционка больше 4Гб не видит — тоже не стоит

    Reply
  35. Gilev.Vyacheslav

    (31)

    Boost priority — увеличивает приоритет сервера.

    Ну увеличивает. А как это сказывается (в цифрах и фактах пожалуйста).

    Да, сейчас 1С и SQL вместе находятся. До недавнего времени на разных машинах висели, но настройки оптимальные были такими-же…

    На счет настройки памяти не соглашуюсь. На отдельно стоящем сиквеле и совмещенном настройки памяти разные.

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


    При переносе SQL на сервер, где 1С вращается, производительность чуть-чуть возросла, хотя сервера были по мегабитному каналу связаны.

    Сколько сетевух на сервере? Может быть пора посмотреть 10гигабитку.

    К тому же не всегда есть возможность и целесообразность совмещать.

    А то Вас тут почитают и таких дров наломают.

    Но это так, непринципиальная критика. Просто не хотелось бы рядом с дельными советами видеть «отсебятину». Т.е. лучше меньше советов, но максимально дающих эффект.

    Reply
  36. glinmn

    Не хорошо писать письма без обратного адреса.

    а по делу- по комментируйте(дело было в понедельник 15 февраля), что и как вы по Вашей схеме будете восстанавливать:

    ЗАГОЛОВОК: Microsoft SQL Server Management Studio

    ——————————

    Не удается вывести требуемое диалоговое окно.

    ——————————

    ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ:

    Не удается вывести требуемое диалоговое окно. (SqlMgmt)

    ——————————

    SQL Server обнаружил логическую ошибку ввода-вывода, связанную с согласованностью: неверный идентификатор страницы (ожидаемый 1:712; фактический 0:0). Она произошла при прочитать страницы (1:712) в базе данных с идентификатором 4 по смещению 0x00000000590000 файла «C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDATAMSDBData.mdf». Дополнительные сведения см. в журнале ошибок SQL Server и журнале системных событий. Это серьезная ошибка, которая угрожает целостности базы данных и должна быть немедленно исправлена. Выполните полную проверку базы данных на согласованность (DBCC CHECKDB). Эта ошибка может быть вызвана многими причинами; дополнительные сведения см. в электронной документации по SQL Server. (Microsoft SQL Server, ошибка: 824)

    Чтобы получить справку, щелкните: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&EvtSrc=MSSQLServer&EvtID=824&L­inkId=20476

    ——————————

    КНОПКИ:

    ОК

    Reply
  37. glinmn

    В дополнение предыдущему:

    — работающий магазин, остановка очень догая и начальство за спиной стоит

    — Win 2003/32, sql 2005/32, 1c 8.1, база ~100Gb

    — техника обычная для нашего бизнеса.

    Reply
  38. a-novoselov

    (37) (38) Дак по-английски ведь написано, что железо сбоит. У нас одно время сервак тупо ребутался, как будьто кто-то резет жмет 2-3 раза в день, в логах винды писал только что «завершение работы было неожиданным…» спас только переезд на другой сервер и отказ от xen-подложки, т.е. без виртуальной машины ща работает. Другие виртуалки на той-же винде на том-же сервере нормально работают, не перезагружаются. Майкросовтовские продукты могут неожиданно себя вести при каких-то железных сбоях и вообще ничего не сообщать и в логи не писать. А по поводу лечения — базу с бэкапа на новом серваке поднять.

    Reply
  39. markers

    Любые статьи и комментарии по этой теме и по существу, весьма полезны! Подчерпнул пару полезностей из статьи и коментов! Всем спасибо! Больше бы таких статей и коментов!

    Reply
  40. idef

    Мда, расчет по ограничению памяти сервера действительно спорный получился.

    А какие есть мнения по поводу параметра «Max Degree of Parallelism» ❓

    Это напрямую должно влиять на производительность.

    Reply
  41. glinmn1

    Дык по английски мы читать не умеем!!!

    А восстановление заняло 5 минут. Всего лишь упал Log у Master.

    Какой переезд на другой сервер, какой ребут, я же писал магазин, работающий 24 часа

    А вообще по жизни, был хороший ресурс, но теперь для поднятия рейтинга постят ВСЕ. Хорошо если читает грамотной, он разберется ,что к чему, а новичек, прочтет сделает по данной схеме получит геморой в лучшем случае или увольнение после очередного падения сервера

    Читайте и думайте.

    Reply
  42. a-novoselov

    (42) Конечно надо в первую очередь логи SQL посмотреть, а не одно сообщение хз откуда.

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

    Reply
  43. a-novoselov

    (42) Что в настройках вам не нравится? Из-за чего при таких настройках может упасть сервер? При чем тут падение лога у мастера, если тут про настройки системных таблиц вообще ничего не говорится?

    Reply
  44. qSerik

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

    Reply
  45. CheBurator

    (45)

    еще добавил ежечастно очистку процедурного кеша,

    — что это такое и как делается?

    Reply
  46. qSerik

    (46) В агенте выставляется команда для базы

    DBCC FREEPROCCACHE

    Удобно раз в час, описание можно найти на официальном сайте, выполнять команду рекомендует 1С.

    Reply
  47. Gilev.Vyacheslav

    (47) пока ссылку на офицальном сайте, что это рекомендуется все делать

    ты хотя бы понимаешь, что удаляешь скомпилированные запросы этим ?

    Reply
  48. a-novoselov

    (48) Во время сбора статистики кэш автоматически чиститься? Для проверки надо включить, потестить как оно отрабатывать будет.

    Reply
  49. boogie

    Можно ламмерский коммент?

    36 гигов оперативки на сервере это круутааа 🙂 У нас 2 гига и Win2003. Так и живём :{}

    Reply
  50. Душелов

    (50) Тут коммерческому предприятию гордиться нечем. У большинства ноутбуки уже мощнее будут.

    Reply
  51. Gilev.Vyacheslav

    (49) причем тут статистика и кэш?

    надо просто понимать рекомендации, а не только тупо их выполнять

    если объем данных изменяется не сильно, то очистка процедурного кэша скорее зло, так как скулю придется компилировать запрос заново

    именно поэтому у админов есть термины типа «прогретый кэш», потому что все необходимые данные подняты в кэш и скомпилированы запросы

    т.е. при первом запуске когда кэши «холодные» запросы исполняются дольше

    резюмирую: процедурный кэш надо чистить не ради чистки, а если вы видите что система очень сильно загруженно и очитска кэша ускоряет общую производительность (т.е. когда заново скомплированный запрос работает с новыми условиями типа статистики, объемов строк, индексами и т.п.)

    Reply
  52. a-novoselov

    (52) Включил очистку раз в сутки система начала тормозить по утрам. Полезная фича получается, если делать ее раз в неделю (после переиндексации) — скомпилированные запросы ссылаются на старые индексы и очистка кеша ускоряет работу.

    Reply
  53. lion11

    А разве Полная переиндексация не включает в себя Дефрагментацию индексов?

    Reply
  54. Gilev.Vyacheslav

    (54) я не знаю что значит Полная,

    перестройка индексов — это удаление индекса и создание его заново.

    После этой процедуры дефрагментировать дополнительно нечего, уже все упорядочено в момент создания.

    Reply
  55. lion11

    (55) Я так понимаю, что под Полной автор имел ввиду «Rebuild Index», а дефрагментация — это «Reorganize Index». Вот меня и смутила фраза «…естественно после полной переиндексации сразу же делается дефрагментация индексов и обновление статистики.» — это уже не требуется.

    Reply
  56. Gilev.Vyacheslav

    (56) вот поэтому я думаю, что статья называется «как правильно» слегка неадекватно, скорее опыт удачной настройки 🙂

    Reply
  57. lion11

    Тем не менее — статья очень полезная! Плюсы заслуженные!

    Reply
  58. Gilev.Vyacheslav

    (58) полезность штука субъективная,

    вот http://kb.1c.ru/articleView.jsp?id=13 куда правильней называется «регламентные операции», а не как правильно делать регламентные операции 🙂

    Reply
  59. tidex-s1

    (57),(59)

    Молодец! и даже

    Критерий оптимальности указал!!!:

    1. MS SQL для круглосуточной работы

    2. более, чем 200 пользователей одновременно

    Все ясно и понятно если MS SQL для круглосуточной работы И более, чем 200 пользователей одновременно —-> пользуйся этой статьей.

    Reply
  60. igyo

    Эта инструкция на 200 и больше пользователей. А что изменить в этой инструкции на 50 пользователей

    Reply
  61. Gilev.Vyacheslav

    (63) на 1000 пользователей с такими настройками скуль просядет, тем более что на таких масштабах настройки базы также начинают играть ключевую роль!

    Reply
  62. Gilev.Vyacheslav

    (61) я бы занизил количество соединений в параметрах как минимум

    Reply
  63. a-novoselov

    (63) А не могли бы подсказать, какие настройки необходимо поменять на 1000 пользователей? Из-за чего скуль просядет? Поможет ли скуль при работе с 1С «ALTER DATABASE Database SET ALLOW_SNAPSHOT_ISOLATION ON;» для уменьшения количества блокировок?

    Reply
  64. Gilev.Vyacheslav

    (65) нет, не хочу

    то что я считал нужным расказать публично, я выкладываю на свой сайт gilev.ru

    все что считаю конкурентным преимущество, я «продаю» на курсах или ввиде консалтинговых услуг

    но если кто сомневается, что скуль просядет на 1000 юзерах, попробуйте сами…

    Reply
  65. a-novoselov

    (66) Интересно, что вы преподаете такое на курсах, если про вас говорят пацаны из Олми, что вы код ногами пишите?

    Reply
  66. Gilev.Vyacheslav

    (67) Напишите на почту gilev.ru собачка gmail.com, что КОНКРЕТНО Вас интересует. Я попробую ответить.

    Надеюсь, не путаете меня с однофамильцем http://www.spec8.ru/

    Reply
  67. a-novoselov

    (68) Да, похоже действительно однофамилец.

    Reply
  68. 1Це

    (66) это конечно может быть и верно, но уже не первый раз замечаю, что вы влазите в ветку, начинаете говорить что все неправильно, и что вы знаете как сделать лучше в разы. При этом по делу — ноль, одни туманные фразы типа «скуль просядет», а почему просядет — это уже за деньги. Если это ваш способ рекламы, то он, мягко говоря, гниловат. Если вы решаете написать в ветку, будьте готовы подтвердить вашу критику дельными советами, а если ваша цель — завлечь людей на свой консалтинг, то завлекайте на своем сайте, нефиг тут воду мутить.

    Reply
  69. dmv78

    то что надо как раз! Спасибо автору!

    Reply
  70. Cat-MF

    В настройках базы на скрине выключена корреляция дат. ИМХО, надо бы включить.

    Reply
  71. Jogeedae

    про Максимальное количество потоков по-умолчанию ссылка:

    MSSQL max worker threads на msdn

    Вроде неплохие базовые настройки, плохо конечно, что без описания почему-куда, тут gilv верно отметил.

    Reply
  72. westinka

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

    Reply
  73. zzz_natali

    Почему в настройках базы Auto Shrink стоит False, а не True?

    Я обычно взвожу этот флаг.

    Reply
  74. a-novoselov

    (75) Shrink базы данных довольно затратная процедура, при круглосуточной работе пользователей тормозит базу и мешает людям работать. Если БД постоянно растет, смысла в этой процедуре вообще нет, т.к. SQL использует сперва уже выделенное под БД освободившееся дисковое пространство. Да и выделение нового пространства после Shrink’а затратная процедура… Вобщем, при необходимости (свертка или чистка неиспользуемых регистров) сжать файлы можно и вручную.

    Reply
  75. Motor24

    Спасибо за статью, думал, что настроил свой вариант «скуль+восьмерка» нормально — ан нет, пойду вносить коррективы.

    Reply
  76. Jackman

    Спасибо. Лишний раз, для спокойствия, перепроверил параметры скуля.

    Кстати, встречалась информация, что связка WinServer2008+MSSQL2008R2+1C8.1 (да и 8.2) дают значительно большие тормоза, чем более ранние версии скуля и винды. Даже тесты делались, дважды тестировали на одном железе, но с разным софтом:

    1

    Win2003 (32bit) + SQL 2005

    Первый тестовый запуск 3:30

    Второй тестовый запуск 2:30

    2

    Win2003 (32bit) + SQL 2005 + оптимизации

    Первый тестовый запуск 3:30

    Второй тестовый запуск 2:30

    3

    Win2008R2 + SQL 2008 + 1C x64

    Первый тестовый запуск 5:30

    Второй тестовый запуск 4:30

    4

    Win2008R2 + SQL 2008 + 1C x86

    Первый тестовый запуск 5:30

    Второй тестовый запуск 4:30

    5

    Win2008R2 + SQL 2005 + 1C x64

    Первый тестовый запуск 5:20

    Второй тестовый запуск 4:15

    6

    Win2008R2 + SQL 2005 + 1C x86

    Первый тестовый запуск 5:20

    Второй тестовый запуск 4:15

    7

    Win2003 (32bit) + SQL 2005

    Первый тестовый запуск 3:15

    Второй тестовый запуск 2:20

    Reply
  77. wowkai

    спасибо за статтю. а как часто нужно делать дефрагментацию дисков с БД и логом? или нужно вобще?

    Reply
  78. Serg0FFan

    (78) Jackman, интересно, а

    Win2003R2(х64) + SQL 2005 + 1C x64

    какие показатели выдаст?

    Reply
  79. profych1

    спасибо

    Reply
  80. a-novoselov

    (79) Для файловой системы NTFS дефрагментация в принципе не обязательна. Да и на FAT она дает прирост производительности когда часто записывается / удаляется / перезаписывается большое количество мелких файлов. А база данных храниться в двух больших файлах, дефрагментация ничем не поможет.

    (78) (80) Здесь же на инфостарте встречал публикацию (правда найти сейчас не могу, может быть так-же в комментариях было где-то), в которой говорилось о том, что Win 2008×64 + SQL 2008×64 дают большую производительность, чем 2003. Насколько я знаю в 2008 винде очень сильно переписана процедура работы с файловой системой, ускоряющая работу с файлами если не на порядок, то в разы точно. И результаты таких тестов являются частным случаем для конкретного оборудования. Если на сервере 2 ГБ памяти, то и дибилу понятно что поставив туда 2008-е вин и скуль, вы снизите производительность в разы, по сравнению с 2003-ми.

    Вобщем желательно самому на своем оборудовании протестировать и решить с чем работать комфортнее. Да и поддержка M$, обновления и т.п. для 2008-х покачественнее, ИМХО.

    Reply
  81. zzz_natali
    a-novoselov пишет:(79) Для файловой системы NTFS дефрагментация в принципе не обязательна. Да и на FAT она дает прирост производительности когда часто записывается / удаляется / перезаписывается большое количество мелких файлов.

    Батенька, Вы бы хоть ИМХО добавляли, чтобы безапелляционно делать такие утверждения. Не нужен дефраг на современных винтах с размером больше терабайта? ну-ну… 🙂

    Reply
  82. a-novoselov
    Reply
  83. zzz_natali
    Какая разница какого размера диски? Это же не файловый сервер, а сервер БД.

    ага, посмотрю как головки будут хрустеть, когда идет полнотекстовый поиск на базёнке размером под сто гектар (волею судеб распухшей вперемешку с другим хламом на разделе)…

    Reply
  84. a-novoselov

    (85) Ставь RAID и хрусти веселей 😉 дефрагментация тебе не поможет, т.к. ФАЙЛ БД ОДИН, и головки будут летать +- 100ГБ пространства что при фрагментированном файле, что при файле одним куском. И не храни хлам рядом с базой. С хламом после дефрагментации все равно дырки останутся из-за особенностей файловой системы.

    Reply
  85. AlexO

    (86) вам правильно указали, что дефрагментация нужна:

    1) если база стоит с ОС

    2) если база не одна, а SQL обслуживает еще много чего.

    Когда есть отдельный РЭЙД только под базу, есть возможность этот рейд «защищать» от вопросов начальства («а че это у вас пустой рэйд токо с одной базой!?») — замечательно.

    Но именно это нужно указать в примечаниях к «дефрагментация не нужна!»

    Дефрагментация — это накладные расходы использовыания файловых систем виндовс, в линуксах и прочих никсах создатели ФС заранее постарались свести к минимуму как саму фрагментацию, так и её последствия.

    Т.е. опять же, кто сидит на 1С и Линуксе (Posgre) — тоже могут об дефрагментации не думать.

    Reply
  86. AlexO

    (25)

    Кстати SQL умеет распараллеливать запросы

    SQL-то умеет, только какой в этом прок, если этого не умеет 1С-сервер?

    Reply
  87. AlexO

    (26) _Z1,

    и как правило не рекомендуют ставить значение больше 5.

    Ничего подобного.

    Опция Maximum Degree of Parallelism — работает с устройствами, а не параллелит обработку данных по нитям процессов.

    И поэтому рекомендуют как раз исходить из количества рабочих процессоров и так выставлять Maximum Degree of Parallelism, чтобы некоторое их количество оставалось не занятыми для других дел, если SQL вдруг решит распараллелить какую-то задачу и нагрузить процессоры.

    и общая производительность падает вместо ожидаемого роста.

    Вот поэтому и падала производительность — все процессора занримались для некоей «параллельной» обработки.

    (27)

    Да, мы тоже сперва MaxParallelism в 5 выставили, но с 0 на замерах производительности большие запросы быстрее обрабатывались…

    0 — это максимальный параллелизм. В тестовых «забегах» максимальное использование ресурсов процессоров для получения блоков данных параллельно эффект дает, а в реальной работе — нет. И все благодаря использованию 1С-сервера.

    Почему — смотрите выше.

    А вообще — для настройки и администрирования SQL администратору нужно читать по каждому параметру отдельно, что, зачем и почему. Или ставить все по умолчанию.

    Reply
  88. nSpirit2

    (66) gilv, А как определить что скуль просел от тысячи пользователей? А то что то абдекс говорит что все нормально с 1с что я делаю не так ? 😀

    Reply
  89. dexxxqqq

    (11)

    Были преценденты, что лог не урезался, решили добавить ручное «обрезание».

    прецедент, инцидент, претеНдент

    Reply
  90. KAV2

    (52) Вообще хотелось бы процедурный кэш не очищать, а «скорректировать» с учетом обновленной статистики, возможно ли это не подскажете? Иными словами хочется чтобы кэш оставался «прогретым» но с учетом данных обновленной статистики.

    Reply
  91. goodron

    (11) насильное уменьшение файла журнала (ректально — DBCC SHRINKFILE), при любом значении recovery model — это глупость, расплата за нее — падение производительности. Я, кстати, DBA (Oracle, MSSQL) со стажем 10 лет, доку по SQL-серверам перечитал вдоль и поперек, и не только доку. Знаю техн. подробности того как движок БД работает с журналом при выполнении транзакции, как происходит создание бэкапа, как происходит восстановление базы из бэкапа и т.д. и т.п. все перечислять места не хватит. Правильно делать так — размер журнала задать такой чтобы увеличение размера файла журнала было крайне (!!!) редким событием. Если не делаете бэкап журнала (допускаю, что вы не знаете зачем это делать), то не ставьте recovery model = full , оно вам ничего не даст, юзайте recovery model = simple

    Reply
  92. goodron

    (57) «правильная» настройка сервера зависит от нагрузки и многих обстоятельств. Автору статьи следовало дать название «Как я поковырялся в параметрах своего сервера MSSQL и меня за это не казнили». Кстати, у вендора на сайте есть специальные документы по анализу производительности сервера «White papers» про «Performance Tuning»

    Reply
  93. zzz_natali

    (234)

    Преамбула: (из анекдота) «Ты не выделывайся. Пальцем покажи!»

    Фабула: Если нет возможности/сил/желания идти вашим 10тилетним путём, то какой приговор вы нам, простым смертным, даёте? Иными словами, если мы не участники Формулы-1 и не стоит вопрос о тюнинговании базы данных на молекулярном уровне, можете дать усредненный рецепт по открыживанию настроек с минимальным пояснением «почему так выставили зажигание»?

    Послесловие: можно не делать бакап журнала и при этом знать, почему это не делаем!

    Reply
  94. goodron

    (238) 1) Не пытайтесь объять необъятное. 2) Научитесь использовать то, что есть в самой платформе 1С — индексирование, регистры, агрегаты — это все придумано для ускорения работы, владение этими средствами творит чудеса. 2) Правильный совет по настройке SQL-сервера зависит от величины нагрузки на сервер. Советы по настройке «на все случаи жизни» — это ложь. Самый важный показатель скорости работы 1С — время реакции. Если для бизнеса время реакции 1С приемлемо, то не имеет значения насколько железка нагружена/перегружена т.е. плевать на счетчики производительности, хотя они могут зашкаливать. Если время реакции 1С стало неприемлемо велико, только тогда надо искать ответ на вопрос «что мы делаем не так?»

    Reply
  95. mellug

    (9)Ох, «не факт». Если это, например, предприятие пищевой промышленности, которое работает без выходных, то очень трудно найти «окно» в работе пользователей.

    Reply
  96. Gilev.Vyacheslav

    (249) кто хочет тот найдет, кто не хочет, тот придумает почему нельзя найти

    некоторые регламенты нужно делать не зависимо от того «как кому то хочется работать»

    вы что бэкапы к примеру не будете делать из-за того что 24х7 ? ну-ну

    если у вас за ночь не успевает дефрагментация — значит вам надо перепроектировать структуру хранения данных, обрезать периодически базу, увеличивать скорость записи дисков и другие элементарные действия, а не ныть

    Reply
  97. Xershi

    (37) обнаружили что на сервере стоят разные версии MSSQL.

    Когда запустил версию на который БД 1С вертятся, все открылось.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *