Pull to refresh

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

Reading time6 min
Views15K

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

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

Articles