Ответы пользователя по тегу SQL Server
  • Как установить Microsoft SQL Server на неподдерживаемые дистрибутивы?

    @rPman
    универсально - контейнирзация (например докер) или даже виртуализация
    Ответ написан
    Комментировать
  • Какие хорошие средства бекапа для MS SQL?

    @rPman
    настроить master-slave репликацию на второй сервер и уже на этом втором сервере каким угодно способом делать бакапы, это не затронет (по нагрузке) основной и будет достаточно эффективно (так как нагрузка на чтение у этого бакап сервера нулевая)

    смутно помню как я (на oracle но думаю так везде можно сделать) отключал все индексы на slave базе кроме pk и нагрузка на запись этой базы была наиболее низкой
    Ответ написан
    Комментировать
  • Можно ли добавить галочку на логику (true = ✓ ,false = " ")?

    @rPman
    есть тип bool или boolean, смотри документацию к своей базе данных

    подавляющее большинство языков программирования или фреймворков работы с базами данных, воспринимают целое число 0 - как false, а 1 - как true (часто true - любое другое число)

    есть еще подход, null - false, любое другое значение - true, но помню были ситуации (и не в одной какой то бд) что пустые значения не попадали в индекс, и работа с ними была неэффективно, и хотя это было давно.. осадочек остался

    И конечно есть перечисляемые типы - enum, определяй свои значения для true/false, но реализация в разных базах данных - разная, одни хранят строковые значения как есть, а другие - числовые, соответственно описанию типа enum
    Ответ написан
  • Как настроить источник данных в Excel, как файл подключения в сети?

    @rPman
    А если один раз настроить, сохранить файл как шаблон и растиражировать его по пользователям домена например скриптами?
    Ответ написан
    1 комментарий
  • Как посчитать ФИО в колонках с неправильным порядком?

    @rPman
    так как цель найти одних и тех же людей с перепутанным порядком
    найди записи в которых col1 совпадает с col2 потом с col3, потом col2 с col3, получишь список пар, в которых это перепутано, осторожно, вырожденные случаи (например в ФИО записаны инициалы) или к примеру восточные имена (там встречаются очень сложные составные фио, которые записывают кто во что горазд), эти моменты лучше обработать отдельной логикой

    select a.*,b.*
    from table a inner join table b on
    a.col1=b.col2
    -- a.col1=b.col3
    -- a.col2=b.col3
    Ответ написан
  • Как правильнее использовать ресурсы ПК для терминального сервера и 1C+SQL?

    @rPman
    upd. не сообразил что сервер у тебя на windows, а мой ответ подходит только для linux хоста (можно конечно пробросить контроллеры дисков внутрь одной из виртуалок, и там уже на Linux все сделать но мне кажется это извращением)

    уже не актуально
    Если есть потребность хранить больше данных чем позволяют ssd, не терять в скорости и не управлять размещением данных вручную (а это бывает очень непросто если у тебя виртуалки, размазывать для каждой софтинке ее файлики в виртуалках по разным дискам это геморой, кстати не всегда возможный), то можно попробовать настроить кеширование медленных hdd дисков, разместив bcache кеш на ssd.

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

    Настоятельно рекомендую не делать один большой блочный bcache диск с одним большим кешем на все доступное пространство на ssd... лучше поделить на тома, соответственно с разным характером нагрузки. Причем размеры кешей для каждого характера нагрузки могут быть разными. А еще можно части ssd и hdd диска выделить для разделов вне кеширования.

    Пример - если сделать 2 блочных устройства отдельно для файлов ОС (к примеру выделил всего 8гб кеша) и отдельно для файлов нагруженной базы данных (у меня так на очень слабой железке 2013 года, хорошо такие нюансы выявлять) то высокая нагрузка на базу данных не затронет кеш файловой системы ОС, характер нагрузки ОС отличается от базы данных, файлы ОС читаются и меняются редко, и если бы лежали на одном блочном устройстве, из ssd кеша их бы выкинуло быстро, а так - отзывчивость работы с ОС осталась на высоте при видимой высокой на hdd диск из-за базы данных.

    p.s. если у тебя ssd диск в рейде, то не бойся включать bcache стратегию writeback, поднимает скорость очень заметно
    Ответ написан
    4 комментария
  • Как проверить наличие значений в таблицах?

    @rPman
    большинство sql баз данных позволяют использовать результат работы select в качестве таблицы во from (либо определять такие вьююхами).

    про добавление суток, оператор LEFT JOIN позволяет объединить таблицы во from таким образом что записи левой таблицы будут в результате обязательно, когда как записи от правой только при совпадении условия в ON (аналогично есть RIGHT JOIN, только подсчет будет для правой таблицы)

    соответственно проверяешь нужное поле на null делаешь плюс один

    про рекурсивные добавления не понял
    Ответ написан
    3 комментария
  • Как сделать проверку столбца типа varchar на уникальность?

    @rPman
    Такое можно сделать только индексом unique. При добавлении неуникальной записи будет выдавать ошибку.

    Иначе вам придется вручную делать то же самое что он, гораздо менее эффективно по скорости и затратам ресурсов.

    p.s. если колонок очень много то вместо добавления их в индекс можно добавить только хеш строку на их основе (т.е. заведите в таблице еще одно поле и при добавлении считайте вручную программно или с помощью sql хеш от суммы concatenate ваших колонок, только между строками добавляйте какой-нибудь символ чтобы отделить колонки), только берите что-нибудь не самое простое, чтобы вероятность коллизий была как можно меньше (коллизия в вашем случае это фальшивое срабатывание на строки, которые дубликатами не являются)
    Ответ написан
    Комментировать
  • Нужна ли дефрагментация RAID1 на аппаратном контроллере LSI SAS9211-4i?

    @rPman
    raid не требует дефрагментации потому что в нем нет такой сущности, дефрагментацию требует файловая система, которая может быть размещена на raid массиве.

    Запустите инструмент дефрагментации от майкрософта, он проанализирует и посоветует вам, нужна ли она или нет. Обычно, если свободное место на вашем диске никогда не уменьшалось меньше 30% (на самом деле зависит от характера использования, и может быть хватит и 10%) от общего объема, то файлы на диске не будут фрагментированы в принципе.

    Фрагментация появляется, если во время записи (увеличения) файла, места на диске мало, и система начинает его распихивать по дыркам, оставшимся от удаленных ранее файлов.
    Ответ написан
    Комментировать
  • И всё-таки, как «правильно» выполнять из PHP сложные sql-запросы?

    @rPman
    Не нужно перебарщивать, решите только одну главную проблему передачи параметров — escaping и quoting параметров, никаких монструозных велосипедов, только поправьте метод выполняющий ваши запросы, :param пусть идут в sql-запрос без изменений (а сам запрос сделать параметризованным, список параметров получается просто поиском всех вхождений /\:(\w+)/), а {param} заменяются по старинке, пусть там останутся куски самого запроса с выражениями.
    Ответ написан
    Комментировать
  • Проблема в связке PHP + MS SQL Server 2005

    @rPman
    Очень плохая практика тяжелых монстров подключать к веб-морде напрямую. Это проблема создается разработчиком еще на этапе разработки архитектуры приложения.

    Про монстров, я имею в виду mssql/oracle/ibmdb…

    Исправить это сложно, особенно если не предусмотрено мест в коде для этого. Основное направление, ставьте что-то по проще, между веб-сервером и базой данных, основанное на document oriented db, какое-нибудь nosql решение (но и mysql+text indexing services поставить между вебом и oracle — тоже нормально), иногда достаточно решений вида 'просто кеш'.

    Обязательно этот модуль на себя должен брать вопросы аутентификации и авторизации, да и вообоще вопросы безопасности по максимуму (сам участвовал когда то в решении, где логин пользователя веб был логином в БД oracle, страшно вспомнить, хотя права доступа БД были оттюнены и завернуто было все через пакеджи и вьюхи).
    Ответ написан
    Комментировать
  • Кэширование таблиц

    @rPman
    Очень давно не работал с mssql, если внутрь уже готовых функций лезть никак 9а это единственно верный способ оптимизации), то у вас есть два способа:
    1. разместить таблицу в отдельном таблеспейсе на ram диске (не рекомендуется, так как в случае аварийной остановки сервера базу придется чинить, но это гарантированно разместит данные только в оперативной памяти)
    2. создать таблицу в памяти (точнее в tempdb) stackoverflow.com/questions/27835/does-ms-sql-support-in-memory-tables и прилинковать через вьюху
    Оба метода требуют дополнительных скриптов, по наполнению этих таблиц при перезапуске сервера а так же самое главное по сохранению изменений, ничего лучше кроме копирования изменений в нормальную таблицу тригером не приходит в голову — очень эффективно, чуть по сложнее — поднять еще одну базу и настроить репликацию (но цена вопроса — удорожание лицензии на серверный софт)

    p.s. кстати две или более базы, разнесенные по серверам или даже географически могут позволить схемы, когда полностью вся база размещена в оперативной памяти.
    Ответ написан
    1 комментарий
  • Select/where/group by на 100m-200m таблицах?

    @rPman
    Меняется ли sum(field2) для каждого field и как часто? Критично ли скорость его записи?
    Если быть более точным, изменяется ли поле field2? или только добавляются и удаляются новые записи?

    Я к тому что такие задачи решаются гораздо проще просто доп-таблицей (field, sum_cache) и обновлением на основе триггеров или самостоятельно… кстати на сколько я знаю есть БД поддерживающие кеш-индексы на основе выражений (фактически они и создают поле и наполняют его триггерами)
    Ответ написан