Ответы пользователя по тегу SQL Server
  • В чем разница следующих подходов в выборке?

    @res2001
    Developer, ex-admin
    Во втором надо условие Period_id in (902,855)) перенести во фразу join, вот так:
    SELECT [FormId], count(F.Id)
      FROM [Application].[FormFieldsDataContent] F with(nolock) join
        [Schema].ProjectForms A with(nolock) on A.Period_id in (902,855)  and F.FormId=A.Id and F.PeriodId=A.Period_id
    group by [FormId]

    Видимо у вас таблица ProjectForms большая, без этого условия в нужном месте из нее выбираются все данные, удолвлетворяющие условию (F.FormId=A.Id and F.PeriodId=A.Period_id), а потом, уже из результирующей большой выборки делается отбор A.Period_id in (902,855).
    В первом примере это условие стоит во вложенном запросе, соответственно вложенная выборка будет значительно меньше.
    На самом деле вложенные запросы, как правило выполняются дольше joinов, поэтому мой вариант, скорее всего будет работать еще быстрее.
    Ответ написан
    Комментировать
  • Что лучше триггер или процедура? И почему не запихнуть бы всю логику в процедуры?

    @res2001
    Developer, ex-admin
    Добавлю свои 5 копеек.
    В свое время (90 года, раньше не в курсе), открыв любую книгу по проектированию приложений и баз данных вы бы прочитали именно такой рецепт - вся логика в б.д. на процедурах и триггерах, а клиентская часть - по сути только обеспечивает интерфейс с пользователем. Это клиент-серверная архитектура.
    Сейчас же, с переходом на веб, архитектура приложения, работающего с БД стала трехзвенной, поэтому стало возможным вынести логику из БД на уровень веб-серевера/сервера приложений. Это ни плохо и ни хорошо. Просто сейчас так модно - БД просто хранилище данных, а логика вся на сервере приложений. Раньше было модно логику держать в БД.
    Хотя и раньше никто не препятствовал делать трехзвенку, но она получалась искусственной и нужны были дополнительные доводы, чтоб ее реализовывать. Сейчас же трехзвенку создавать не надо - она уже есть по факту наличия веб-приложения.
    Те кто не разрабатывает веб-приложения просто следуют модному течению.
    По уму надо сочетать оба подхода, т.к. какие-то операции лучше реализовывать в БД, а какие-то в сервере приложений или в клиентской части.
    Ну и вопрос цены, разумеется - хороший DBA (или программист БД) стоит дороже (и это более редкие звери), чем хороший веб-разрабочик.
    Ответ написан
  • Какие характеристики по железу лучше выбрать для сервера ms sql 2014?

    @res2001
    Developer, ex-admin
    16Г ОЗУ - это по вашему упор на оперативную память? Да сейчас у детей для танков памяти в компах больше.
    Возьмите памяти столько, чтоб база полностью в кэш влезла, пока она у вас еще не слишком разрослась - 64 Гб хотя бы.
    120Г HDD для базы мало. Если у вас данных только 50 Г, а еще есть журнал, который может расти гораздо быстрее и занимать места гораздо больше (если не предпринимать никаких действий). Да еще и система на этом же винте откусит 30-40 Гб. В любом случае через 1-2 года ваши 120Г кончатся и нужно будет апгрейдится. Собирайте конфиг, чтоб лет 5 хотя бы железо не трогать.
    Проц лучше i7 - у него кэш больше.
    Можно не брать SSD, если бюджет ограниченный, т.к. SSD большой емкости стоят пока не вменяемых денег. Возьмите рейд контроллер и 4-6 HDD в RAID10. Денег уйдет, возможно, больше, но зато с дисковым пространство проблем какое-то время не будет.
    И, кстати, в вашем случае систему держать на SSD смысла нет никакого (если вы не планируете этот сервер еще как-то использовать).
    При наличии нормального количества ОЗУ и такой конфигурации HDD производительность будет вполне не плохая и места хватит и на систему и на базу.
    Для бэкапов можно взять диски по проще и не загонять их в raid10.

    Собираете сервер, а железо не серверное?
    Ответ написан
    2 комментария
  • RAID на больших дисках для небольших файлов. Есть смысл?

    @res2001
    Developer, ex-admin
    Размер файла никак не влияет на полосу пропускания. Можно в маленький файл писать так что никакой полосы не хватит, а можно и большой файл не использовать никогда.
    Сделайте рейд1 для tempDB и забудьте этот вопрос.
    Почему рейд1? - вы же не хотите при выходе из строя 1 диска останавливать всю работу, а mssql достаточно активно юзает tempdb и без нее работать не будет. К тому же скорость чтения вырастет.
    рейд 5 нынче вышел иp моды, т.к. при современных объемах дисков восстановление рейд5 проходит слишком долго, а это скажется на скорости работы mssql.
    Ответ написан
  • Что обозначает символ; в TSQL?

    @res2001
    Developer, ex-admin
    Видимо как концовка предыдущей команды.
    Если до этого команд нет - пустая команда.
    Ответ написан
    Комментировать
  • Наступил ограниченый режим функционала у microsoft продуктов, чем чревато?

    @res2001
    Developer, ex-admin
    Раз отказали в продаже, можно с чистой совестью воспользоваться активатором :) и начать переходить на линукс.
    Ответ написан
    6 комментариев
  • Как перенести базу MS SQL с одного сервера на другой?

    @res2001
    Developer, ex-admin
    1.Ищите тех у кого есть права на сервер.
    2.Если есть физический доступ к серверу - выключите его, загрузитесь с любого загрузочного носителя и скопируйте нужные файлы БД.
    Ответ написан
  • Порезать БД. Как?

    @res2001
    Developer, ex-admin
    Конечно есть.
    1.Можете одну базу разделить на несколько, нужно будет переписать запросы с учетом этого разделения. Это может быть довольно большой труд, но преимущество может быть в том, что одну из баз данных можно переместить на другой физический сервер, настроить связи на серверах, а для клиента запросы будут проходить прозрачно, так как будто базы на одном сервере.
    2.Можно в одной базе данных создать дополнительную файловую группу, настроить ее расположение на других физических дисках, чем основная файловая группа. Далее создаете файлы БД в новой файловой группе и переносите нужные таблицы в эти файлы. Этот способ менее гибок чем первый, но так же позволяет производить некоторые оптимизации. К тому же этот способ не отменяет первый и наоборот.
    Ответ написан
  • Эффективно ли составлен запрос на получение первых нескольких записей из БД с использованием JOIN?

    @res2001
    Developer, ex-admin
    1.На мой взгляд временная таблица не нужна. Перепишите update без временной таблицы.
    2.Для выборки первых 3 записей я бы добавил какую-нибудь сортировку. Хотя это и не обязательно.
    3.Вместо primary key, я бы сделал уникальный кластерный индекс.
    Вообще запросы не сложные, особо оптимизировать не чего.
    Ответ написан
  • SQL. Иной синтаксис для получения результата?

    @res2001
    Developer, ex-admin
    select A.* from tableA A
    join tableB B on B.id=A.id and B.Param in (x,y)
    Ответ написан
  • Как найти имя сервера ms sql?

    @res2001
    Developer, ex-admin
    В современных версиях MS SQl кроме имени сервера есть еще понятие экземпляра SQL сервера. С учетом этого строка для подключения к MS SQL выглядит так:
    <имя сервера>\<имя экземпляра>
    Если экземпляра нет, а такое то же может быть, то его задавать не нужно.
    На одном сервере может быть несколько экземпляров.
    Имя экземпляра задается при установке MSSQL. Узнать его можно:
    1.зайдя в настройки Служб Windows найдите там службу SQL Server в скобках будет указано имя экземпляр. Таких служб может быть несколько по одной на каждый экземпляр.
    2.Зайдите в панели управления в настройки ODBC подключений, добавьте пользовательское подключение, выберите тип для SQL Server и дальше в мастере на первой, по моему, странице нужно будет указать сервер, если нажать на выпадающий список в этом пункте в списке будут перечислены все доступные экземпляры MS SQL. Этот список формируется динамически опросом сети.
    3.есть и другие способы, но думаю этих будет достаточно.
    Ответ написан
    Комментировать
  • Как настроить бэкап через SQL?

    @res2001
    Developer, ex-admin
    Способов много:
    1.Задание с резервным копированием в SQL Agent.
    2.Задание в виндовом шедулере с запуском резервного копирования с помощью sqlcmd
    3.Использовать специализированный софт для резервного копирования, который умеет делать бэкапы MSSQL, например Symantec Backup Exec.
    Ответ написан
    Комментировать
  • Какие вопросы могут задать на собеседовании младшего администратора БД(MS SQL)?

    @res2001
    Developer, ex-admin
    Что такое база данных master/msdb/model?
    В свое время я прокололся на этом, но тогда я ни разу MS SQL в глаза не видел - работал с другими СУБД.
    Вопросы по бэкапу/восстановлению, сжатию журнала транзакций/базы данных, репликации/зеркалирование.
    Это что касается непосредственно администрирования. Так же скорее всего будут вопросы по T-SQL, но для администратора обычно достаточно базовых знаний.
    Ответ написан
    3 комментария
  • Как правильно создать/восстановить БД в SQL Server 2008?

    @res2001
    Developer, ex-admin
    Какая у версия MS SQL? Не Express ли?
    Если Express, то он не поддерживает команды backup/restore, а потому восстановить базу на нем не получится.
    Ответ написан
    Комментировать
  • Как предотвратить утечку памяти в MSSQL Server 2008 R2 SP3?

    @res2001
    Developer, ex-admin
    Полностью согласен с предыдущими ораторами.
    Отъедать всю доступную память - нормальная политика MS SQL. У меня, например, вся память отъедается в течение получаса после запуска SQL.
    Терминалу не место на сервере баз данных.
    Вообще сервер баз данных плохо совмещается с другими ролями, т.к. при более менее приличной нагрузке, как вы сами заметили, SQL отъедает всю доступную память, кроме того в пиках обычно довольно высокая дисковая нагрузка что то же не комильфо для других ролей. А так же, если другие роли начнуть так же отъедать ресурсы - это очень плохо скажется на производительности SQL.
    Если со временем SQL не займет вообще всю память, значит утечек нет.
    Пока думаете над переносом терминала на другую железку, можно заняться стандартной оптимизацией базы: создать недостающие индексы, вычислить особо тормозные выборки и попробовать их оптимизировать, настроить регламентные задания (дефрагментация индексов, обновление статистики и т.п.), разнести на разные диски файл базы данных и лог файл.
    Ответ написан
    Комментировать
  • Почему не получается сделать бекап базы данных?

    @res2001
    Developer, ex-admin
    Никогда не работал с MS SQL Compact Edition, но судя беглому гуглению по этой теме в данной версии нет поддержки команд backup/restore - бэкап производится простым копированием базы данных после отключения всех соединений с базой.
    Ответ написан
    Комментировать
  • Как узнать хеш-сумму файла в MS SQL?

    @res2001
    Developer, ex-admin
    Напишите скрипт (bat, ps), который будет считать хэши и записывать их в базу.
    Ответ написан
    3 комментария
  • Какой выбрать способ обновления данных и схемы на тестовом сервере?

    @res2001
    Developer, ex-admin
    1.Сделать тестовую базу на удаленном сервере или на сервере в той же сети, чтоб не таскать по 50 Гб бэкапов каждый раз по ВПН. Работу с тестовой базой, возможно, то же придется перенести на удаленный комп.
    2.Можно экспортировать необходимые таблицы во внешние файлы, дальше файлы можно упаковать и т.п. Смотри bcp.
    Ответ написан