SQL Server 2008: обзор нововведений

    SQL Server 2008: обзор нововведений


    Microsoft SQL Server – это проприетарная система управления базами данных,
    обеспечивающая сетевой многопользовательский доступ,
    использует расширенный язык запросов T-SQL.
    Ведет свою историю с 1989 года, первоначальная версия создана Sybase.
    В предыдущей 2005 версии была введена поддержка CLR, которая позволяла
    писать процедуры с использованием языков, работающих на платформе .Net.

    История версий:
    • 1992 — SQL Server 4.2
    • 1993 — SQL Server 4.21 под Windows NT
    • 1995 — SQL Server 6.0, кодовое название SQL95
    • 1996 — SQL Server 6.5, кодовое название Hydra
    • 1999 — SQL Server 7.0, кодовое название Sphinx
    • 1999 — SQL Server 7.0 OLAP, кодовое название Plato
    • 2000 — SQL Server 2000 32-bit, кодовое название Shiloh (версия 8.0)
    • 2003 — SQL Server 2000 64-bit, кодовое название Liberty
    • 2005 — SQL Server 2005, кодовое название Yukon (версия 9.0)
    • 2008 — SQL Server 2008, кодовое название Katmai (версия 10.0)


    SQL Server используется на многих предприятиях, причем 2000 версию до сих пор используют многие компании,
    а многие DBA говорят, что лучше 2000 пока еще Microsoft не смогла сделать,
    особенно это относится к Management Studio.

    SQL Server 2008 появился в августе 2008 года.

    Более подробно о истории MSSQL можно прочитать в WikiPedia



    1. Присвоение переменных в одну строку.

    Теперь вместо:
       DECLARE @myVar intSET @myVar = 5

    Можно писать так:
        DECLARE @myVar int = 5


    2. Математический синтаксис
       
    DECLARE @myVar int = 5
    SET @myVar += 1



    3. Компрессия.

    a) Можно включить компрессию для таблиц/партиций таблиц, индексов.
    b) Уровней компрессий — 2: 1) Строчное, 2) Страничное
    c) В страничное сжатие включается строчное.
        В страничном сжатии есть тип сжатия основанный на «column prefix» matching
    d) Бекапы автоматически сжимаются.

    В целом сообщается, что нагрузка на процессор может возрасти и использование памяти уменьшится.

    Включить сжатие можно через Management Studio:
     Вместо PAGE можно использовать ROW и выбирать партиции таблицы

    И сгенерированный скрипт сжатия:

    USE [test_db]

    ALTER TABLE [dbo].[TestTable] REBUILD PARTITION = ALL
    WITH (DATA_COMPRESSION = PAGE)


    Либо такой:

    USE [test_db]

    CREATE NONCLUSTERED INDEX IX_INDEX ON TestTable (TestTableVarFieldOne)
    WITH ( DATA_COMPRESSION = PAGE ) ;



    Дополнительную информация
    Минусы лицензии: Сжатие доступно только в выпусках SQL Server 2008 Enterprise и Developer.



    4. Появились индексы с фильтрацией.

    CREATE NONCLUSTERED INDEX IX_TestTable_OneON TestTable(TestTableVarFieldOne)
    WHERE TestTableVarFieldOne = 'SampleText'


    Правда почему то они у меня не сработали.
    Видимо нельзя было организовывать первичный ключ…


    Тут описаны примеры: [1][2]

    Для чего это нужно:

    Например мы знаем что по колонке очень часто идет какой-нибудь текстовый запрос из разряда = ‘SampleText’, ставим этот индекс, и наш план выполнения запроса становится вкусный и быстрый.


    5. В SQL Server 2008 есть автоматический аудит.
    Вызывается он из Management Studio из группы «Security»

     Создадим правило аудита, кстати, параметр «Maximum», идущий после параметра «File Path», означает, сколько файлов будет создаваться в папке.

    Теперь ставим аудит на сервер в целом или Базу данных.

       


    Например, нам нужно поставить аудит на то, кто смотрел данные из таблицы «TestTable», обладающий правами «db_datareader»:



    Для этого определим тип действия (их, кстати, порядка 30), класс объекта (БД/Схема/Объект), имя объекта и группу прав.

    Это же можно сделать и в T-SQL:

    USE [test_db]
    GO

    CREATE DATABASE AUDIT SPECIFICATION [TestTableAuditOnView]
    FOR SERVER AUDIT [TestAudit]
    ADD (SELECT ON OBJECT::[dbo].[TestTable] BY [db_datareader])WITH (STATE = OFF)GO

    Ну и потом не забудем сделать наш аудит «Enable»
    Можно почитать про аудит больше тут или тут


    6. Новый дебаггер.

    Тут можно посмотреть скринкаст: http://www.screencast.com/t/Dgohd2wCkfG

    Собственно дебаггер простой напоминает сильно дебаггер в Visual Studio,
    ходит по брякам, и по Step Into/Step Out, можно ставить Watch, смотреть Call Stack,
    автоматически заходить в триггеры.

    В 2005 версии это можно было делать либо из Visual Studio,
    либо, насколько помню, из Business Intelligence Studio и что не очень удобно,
    и права для девелоперов придеться дать не больше, не меньше как «sysadmin»

    Почитать про дебаггинг в SQL Server 2005


    7. Прозрачное шифрование БД.

    Прозрачное шифрование оно же TDE, очень полезная фича, но скорее всего она полезна будет только либо на специфичных задачах, когда данные являются критическими с точки зрения безопасности, либо когда требуется решить проблему:
    «Кто будет охранять самих сторожей» — когда требуется одним администраторам дать доступ к одному, вторым ко второму, а третьему к третьему и если кто-нибудь из этой тройки утащит журнал или бекап или mdf файлы, они будут бесполезны ввиду шифрования.



    Почитать подробнее: [тут] или [тут]

    Минусы лицензии: Доступно только в Developer/Enterprise версиях.


    8. Замораживание плана запросов (Plan freezing).

    Как вы знаете SQL Server иногда пытается менять план запроса, в зависимости от того, как поменялись данные (схема БД).

    Необходимо это для двух вещей:
    1) Для того, чтобы сервер не тратил время, пересчитывая план,
    2) для того чтобы сервер не «разоптимизировал» план
    Это довольно большой обьем работы, поэтому лучше посмотрите Virtual Lab.

    Позднее если эта тема будет интересна ее можно будет раскрыть.

    Virtual Lab


    9. Resource Governor (Разделение и властвование над ресурсами сервера).

    В Management Studio пункт меню находится в группе «Management», в окне Object Explorer.


    Почитать можно [тут]
    А посмотреть [тут]


    10. Новые типы данных (DATE, TIME, DATETIMEOFFSET, DATETIME2, Hierarchyid, GEOMETRY, GEOGRAPHY, FILESTREAM)

    a) DATE – храним только дату
    b) TIME – храним только время
    c) DATETIMEOFFSET – храним дату и время со смещениями «+» или «-»
    d) DATETIME2 – храним дату и время от January 1, 0001 до December 31, 9999
    e) HierarchyId – храним данные иерархий причем дерево иерархий будет довольно компактным.

    Кстати хорошо описан данный тип в статье XaocCPS ( http://habrahabr.ru/blogs/sql/27774/ )


    f) Geometry и Geography это специальные типы, которые содержат в себе векторные объекты:

    Object Descripton
    Point A location
    MultiPoint A series of points.
    LineString A series of zero or more points connected by lines.
    MultiLineString A set of linestrings
    Polygon A contiguous region described by a set of closed linestrings.
    MultiPolygon A set of polygons.
    GeometryCollection A collection of geometry types.
     g) FileStream – храним данные в файловой системе
    Почитать можно [тут]

    Отличия в том, что расстояния в типе Geography выражены в виде градусах долготы и широты, а Geometry в специфичных Unit.

    Почитать можно [тут],  Скринкаст по Geography


    11. Table Value Parameters (можно передавать таблицы как параметр)

    Для чего может быть нужно передавать таблицу из приложения в Базу Данных?

    1) Для того чтобы уменьшить кол-во INSERT/UPDATE операций,
    2) Для того чтобы некоторые части слоя бизнеслогики перенести на сервер

    Плюсы:
    1) Строгая типизация
    2) Сортировка
    3) Мы можем в этих таблицах использовать индексы (первичный ключ)
    4) Удобство

    Минусы:
    Можно наворотить плохое, особенно людям, которые очень изобретательны (например, процедурой генерируют HTML код)


    Пример SQL кода:

    Use testDatabase
    GO
    CREATE TYPE Customer AS TABLE (id int, CustomerName nvarchar(50), postcode nvarchar(50));
    GO
    CREATE TABLE Customers (id int, CustomerName nvarchar(50));
    GO
    CREATE TABLE CustomerPostCodes(id int, postcode nvarchar(50));
    GO
    /*
    INSERT INTO Customers VALUES (1, 'Bob')
    INSERT INTO CustomerPostCodes VALUES (1, 'ASD')
    INSERT INTO Customers VALUES (2, 'Jack')
    INSERT INTO CustomerPostCodes VALUES (2, 'QWE')
    INSERT INTO Customers VALUES (3, 'Gill')
    INSERT INTO CustomerPostCodes VALUES (3, 'ZXC')
    GO
    */
    CREATE Procedure AddCustomers (@customer Customer READONLY)
    AS
    INSERT INTO Customers
    SELECT id, CustomerName FROM @customer

    INSERT INTO CustomerPostCodes
    SELECT id, postcode FROM @customer
    GO

    DECLARE @myNewCustomer Customer;
    INSERT INTO @myNewCustomer VALUES (1, 'Harry', 'NEW')
    EXEC AddCustomers @myNewCustomer
    GO

    SELECT * FROM Customers
    SELECT * FROM CustomerPostCodes
    GO

    Drop table Customers;
    go

    Drop table CustomerPostCodes;
    go

    Drop procedure AddCustomers;
    go

    Drop type Customer;
    go




    Из C# соответственно передается параметром DataTable.
    Посмотреть скринкаст


    12. Вкусности новой Management Studio:

    a) IntelliSense (дожили таки)


    b) Удобная подсветка (тултипы):

    К сожалению «+=» это только математический оператор ((

    c) Она поддерживает Addin-ы.

    d) Интегрированы новые фишечки сервера и удобства — типо дай мне «только 1000 строк»




    e) Обновился Activity Monitor
    Проще написать, что тут можно увидеть «картину в целом», хотя все же частные детали лучше смотреть SQL Profiler, он для этого более приспособлен, а счетчики эти частично заимствованы из Windows Server 2008/Vista «Мониторинг производительности».

    Вообщем смотрим кто, зачем, куда, что и сколько это будет стоить нм ресурсов.


    Довольно приятный «логгер последних ресурсоемких запросов»:


    Особенно приятно просмотреть сразу план выполнения запроса:


    Минусы: Нельзя убрать ненужные колонки или менять их местами…


    f) Мульти-серверные запросы.

    Можно выполнить запрос (ы) на группе серверов, для этого нужно открыть пункт меню (View -> Registered Servers -> New Query).



    P.S

    SQL Server 2008 по использованию памяти мне кажется более эффективный нежели 2005, Management Studio стала более удобной, новые типы данных могут дать больше удобства в разработке, также я вижу что многое добавлено, но около еще года на продакшн серверах не буду ставить в силу того что буду ждать многочисленных отзывов о продукте, особенно о отзывах тех кто будет использовать TDE, DataTable в виде параметра и стабильности.


    P.S.S

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

    Средняя зарплата в IT

    110 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 8 355 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 44

      +9
      немного запоздало, зато очень подробно
      автор — молодец, интересный пост
        0
        Сжатие бекапов — наконец-то!
          0
          не для всех, так что постаринке ;)
          +4
          Наконец-то IntelliSence! Как же грустно было писать весь sql-код ручками, когда VisualStudio с Resharper'ом делают за тебя всю рутину, а редактор запросов в SQL 2005 больше похож на обыкновенный редактор текстов с подсветкой синтаксиса.
            0
            sql prompt or redgate — уже много лет пользуюсь, без уже почти не могу :)
            +4
            Именно из-за таких развернутых обзоров я и люблю читать Хабр! Сразу видно: что, куда, откуда и зачем это нужно.
            Автор, спасибо!
              0
              Большое спасибо.
              0
              Наконецто поддержка даты с offset-ом. А то это приходилось ручками каждый раз имплементировать. FileStream тоже весч, не надо делать из DB помойку.
                +4
                Учтите что FileStream нужно явно при установке SQL Server разрешать.
                А также говорить, что да, использовать FileStream в T-SQL.



                или после установки командой:
                exec [sp_filestream_configure] @enable_level = 3;

                А потом при создании БД.

                Почитать подробнее
                0
                Лично для меня наиболее весомы следующие нововведения:
                Интеллисенс в коде — наконец-то, а то без него было туго :)
                Подробный аудит — недавно один из наших проектов долбили sql-инжектом — в результате была потерта одна табличка — было бы полезно узнать что и как произошло.
                Ну и конечно как и комментатора выше, немножко напрягало делать свои обработчики времени и даты, в зависимости от потребностей задачи.
                А я еще жду до сих пор нормальный и удобный постраничный вывод из таблицы, без костылей :(
                  0
                  От sql-инъекций помогают избавиться параметризованные запросы. Это не в обиду сказано, просто я не знаю путей успешного внедрения инъекций, если при обращении к базе используются параметризованные запросы.
                    0
                    Как вариант если внутри процедуры пришлось в каких либо местах использовать
                    «Динамичный SQL»…, такое бывает но редко.
                    0
                    За все надо платить, за подробный аудит вы заплатите заметным падением производительности, так что просто надо стараться писать код, так, чтобы избегать инъекций, как уже ниже писали (плюс если динамический sql все же нужен, то дополнительная проверка параметров). Но это даже не к MSSQL относится, а в принципе, к любой СУБД.
                    0
                    Я вообще не очень ползуюсь SQL Server'ами, но тут на доsуге пришлось поработать с 2005 и 2008ым. Не понял почему вместо удобного интерфэйса «view table» оставили только «select top 1000 rows»
                      +2
                      Не «View Table», а «Open Table», впрочем неважно…

                      Есть подозрение для того что если больше 1000 строк хочется посмотреть,
                      то человек сам запрос напишет…

                      А если человек новичок то не будет загружать сервер запросом на выборку миллиарда строк…

                      Имхо…
                        0
                        (в случаях если конечно, если администратор не установил политику на такие долгоиграющие и
                        «стоящие» запросы)
                      –1
                      Ну в принципе согласен, ну раз уж было, могли бы и оставить.

                        +1
                        Мне вот что понравилось, что они spatial данные ввели (geometry&geography). До этого надо было либо покупать за приличные деньги решения типа MapInfo Spatial, либо использовать опенсорсный проект с кодэплекса(который последний раз в феврале 2007го релизился и то, на версии 0.1.1).
                          0
                          Возможно я ошибаюсь, но чем больше проприетарных типов данных, тем сильнее привязка к конкретной БД. ИМХО лучше по возможности использовать универсальные. Хотя от проекта зависит, само собой.
                            0
                            Вроде бы MS SQL Spatial соответствует стандарту, так что… Конечно это для специфических, ГИС, приложений, но это большой шаг.
                              +2
                              уверяю вас, переходить от одной бд к другой в сколь либо крупном проекте очень тяжело и без типов данных
                              привязка к субд должна происходит еще на этапе планирования
                              и на нем же должны учитываться все и большинство фич и свойств текущей бд которые собственно и введены для ускорения, оптимизации и прочих улучшений процессов

                              можно приравнять субд к языку программирования на котором пишется проект.
                              никто в здравом уме не станет писать на с++ учитывая типы данных vb например…
                                0
                                Я скорее чесал затылок из-за того, что являюсь поклонником ORM-фреймворков, а там новые типы данных часто вызывают проблемы. Конечно, если сервис замкнут на единственную базу и выжимает максимум эффективности низкоуровневой работой — это другая ситуация.
                                  0
                                  ну врядли введение новых типов как-то ущемляет предыдущие версии фреймврорков
                                  а новые версии уже будут их поддерживать
                                  тоже самое было с VS 2008 она изначально не поддерживала MS SQL Server 2008 ни бету ни релиз
                                  только потом с sp1 пришла поддержка и типов и редактирования объектов базы

                                  а введение типо поддержки гео-данных — это гигантский шаг вперед
                                  разработчики CAD и сервисов с гео-данными оценят
                            0
                            Лимита опять нет =(
                              0
                              что за «лимит»?
                                0
                                Ну условно, в MySQL выбрать 10 постов начиная с 11го будет «select * from posts limit 11, 10». Во многих наиболее распространённых RDBMS, такую операцию надо делать через изврат.
                                0
                                Лимит — не модно :) Он вообще есть где-нибудь окромя MySQL?
                                  0
                                  Наверно и нет.
                                  Я по крайней мере не видел.
                                  0
                                  И не надо. С ним люди таких мостров плодят.
                                  Потом не разберешься.
                                    +1
                                    Согласен.
                                    Но для себя для быстрого пэйджинга удобно было бы =)
                                    +2
                                    Все уже есть ещё в 2005
                                    Называются функции ранжирование, и предоставляют они несравнимо больше свободы чем пресловутый limit.
                                    RANK()
                                    ROW_NUMBER()
                                    DENSE_RANK ()
                                    NTILE()
                                      0
                                      Хм.
                                      Спасибо, пойду 2005й BOL почитаю тогда.
                                    0
                                    кстати, zabr
                                    ты забыл написать про sparse columns
                                    msdn.microsoft.com/en-us/library/cc280604.aspx

                                    тоже очень полезная вещь, которая появилась в 2008 сервере
                                    0
                                    Замечательная статья, добавил кармы автору чуть-чуть.

                                    Сам 2008й не пробовал, но вопрос (больной) есть: в 2005м в «Tasks -> Generate Scripts...» нельзя было выбрать в Script Behavior пункт «Generate the script as DROP statements followed by CREATE statements» (проверял на SQL2005+SP1). Есть ли это в 2008м?
                                      0
                                      Такого не увидел, а то что при генерации скриптов можно автоматически дропать обьекты — это есть:

                                      0
                                      IntelliSence и таблицы в виде параметров функций.
                                      Ради этого можно переходить на 2008.

                                      Не нашел в обзоре ничего про версионность/блокирование данных при запросах.
                                      Что-нибудь в алгоритмах поменялось? Или как в 2005 все?
                                      0
                                      Как это мило, компании Sybase уделили одну строчку. Есть мнение, что вклад компании Sybase в создании MS SQL Server был гораздо больше.
                                        0
                                        Если бы темой топика была «История SQL Server» то написал бы несомненно больше, извините если что…
                                        0
                                        Интересно, они пагинацию в SELECT таки сделали? Т.е. чтобы можно было выбрать записи с 10 по 20, например.
                                        0
                                        спасибо

                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                        Самое читаемое