Posters stockage Windows Server 2012 R2

Pour ceux d’entre vous qui affectionnent les posters imprimés en A0 comme décoration sur les murs, je ne saurais trop vous conseiller de télécharger quelques PDFs sur le site de Microsoft.

Le lien vous donne accès aux 7 posters relatifs au stockage (disques CSV, déduplication, Shared VHDX, Storage spaces, Tiering, Scale Out File Server,…).

image

Gageons que près de 80% des serveurs seront virtualisés d’ici peu. Chers DBAs, il est temps de jeter un œil sous le capot de vos machines virtuelles.

Happy storage

Publié dans Hyper-V, Windows | Tagué , | Poster un commentaire

SQL Server 2014 – Performance TempDB et écritures disque

Encore une nouveauté peu mise en avant sur SQL Server 2014 ! Certes pas très sexy, mais je peux vous certifier que bien des workload vont être (très) positivement impactés par cette nouveauté.

Vous n’êtes pas sans savoir que la TempDB possède un mécanisme de logging (écriture dans le fichier LDF) légèrement différent de celui des autres bases de données. En effet, nul besoin d’assurer le REDO en cas de crash, car la TempDB est reconstruite à chaque démarrage de votre instance.  On ne récupère rien de ce qui a été fait dans cette base de données.

Si vous avez un doute, faites le test suivant : Stoppez le service SQL, supprimez les fichiers de données et de journal de transaction de cette base et redémarrez le service SQL. Les fichiers TempDB sont de nouveau présents.

Donc la TempDB est performante, car moins de journalisation. Mais il était encore possible d’améliorer les choses, car comme toute autre base de donnée, les pages qui la composent dans le buffer pool doivent être écrites sur disque, par le checkpoint et ou lazy writer. Et cela devait se faire assez rapidement.

Avec SQL Server 2014 les pages de données d’objets temporaire peuvent être allouées, utilisées et libérées sans même avoir été écrites sur disque. On est donc moins stressé à écrire rapidement ces pages sur disque, impliquant un gain de performance, mais également, une baisse non négligeable d’activité sur les disques TempDB Data, ce qui dans le cas d’un SAN va bénéficier à tout le monde …

Deux opérations principales vont bénéficier de cette amélioration :

  • création d’index avec l’option sort in tempdb
  • opérations de bulk insert dans des tables temporaires.

Pour vous démontrer le gain que cela peut amener, j’ai choisi le second point. Afin d’être le plus équitable possible, mes 2 VMs sont équivalentes : 4 vCPU, 8GB de RAM, SQL Server installé de la même manière, disques rotatifs (pour bien mesurer la différence qui serait gommée par un disque flash plus rapide en écriture).

Voici le script de démo (joué à tour de rôle sur chacun des serveurs):


-- Restart SQL Server
-- PowerShell : restart-service MSSQLSERVER


-- augmentation de taille de la TempDB
USE [master]
GO
ALTER DATABASE [tempdb] 
MODIFY FILE ( NAME = N'tempdev', SIZE = 102400KB )
GO
ALTER DATABASE [tempdb] 
MODIFY FILE ( NAME = N'templog', SIZE = 20480KB )
GO


-- Création procédure de Test
Use [TempDB]
GO

CREATE PROCEDURE dbo.usp_Test
AS
BEGIN

	SET NOCOUNT ON
	
	DECLARE @Total Money = 0
	DECLARE @min int = 1 
	DECLARE @max int = 2000
	
	WHILE @min <= @max
	BEGIN
		SELECT *
		INTO #result
		FROM AdventureWorks.Sales.SalesOrderHeader

		SELECT @Total = @Total + SUM(TotalDue)
		FROM #result

		DROP TABLE #result

		SET @min += 1
	END

END
GO


-- Vérification du nombre d'IOs sur la TempDB
SELECT DB_NAME(DB_ID()) AS [Database Name], df.name AS [Logical Name], vfs.[file_id], 
		df.physical_name AS [Physical Name], vfs.num_of_reads, vfs.num_of_writes, 
		CAST(vfs.num_of_bytes_read/1048576.0 AS DECIMAL(10, 2)) AS [MB Read], 
		CAST(vfs.num_of_bytes_written/1048576.0 AS DECIMAL(10, 2)) AS [MB Written]
FROM sys.dm_io_virtual_file_stats(DB_ID(), NULL) AS vfs
INNER JOIN sys.database_files AS df WITH (NOLOCK)
ON vfs.[file_id]= df.[file_id]
OPTION (RECOMPILE);
GO

Exec usp_Test
GO

SELECT DB_NAME(DB_ID()) AS [Database Name], df.name AS [Logical Name], vfs.[file_id], 
		df.physical_name AS [Physical Name], vfs.num_of_reads, vfs.num_of_writes, 
		CAST(vfs.num_of_bytes_read/1048576.0 AS DECIMAL(10, 2)) AS [MB Read], 
		CAST(vfs.num_of_bytes_written/1048576.0 AS DECIMAL(10, 2)) AS [MB Written]
FROM sys.dm_io_virtual_file_stats(DB_ID(), NULL) AS vfs
INNER JOIN sys.database_files AS df WITH (NOLOCK)
ON vfs.[file_id]= df.[file_id]
OPTION (RECOMPILE);
GO


DROP PROCEDURE usp_Test

Une simple boucle créant une table temporaire et lisant des informations … SQL Server est redémarré avant chaque test.

image

Plus de 40 minutes et 12,5GB écrit dans le fichier TempDB Data !

Avec SQL Server 2014 le temps d’exécution est de 1:37. On voit aussi que 40 écritures disques ont été effectuées sur le fichier de data, pour 300KB

image

Le constat est sans appel, la fonctionnalité d’eager write démontre tout son intérêt. Le gain de performance est hallucinant, tant que l’on dispose de suffisamment de mémoire, sinon, on reprend le fonctionnement antérieur.

Les curieux qui disposent de l’édition entreprise de SQL Server ont peut être eu l’idée de comparer les performances avec l’utilisation de tables non durables.

Il est très compliqué d’établir un comparatif car dans la procédure stockée compilée nativement, on ne peut utiliser que des tables InMemory. Reste donc l’option Interop. mais peu performante dans ce cas là (6:19 minutes).

Impossible d’annoncer le gain que vous obtiendrez à migrer sur SQL Server 2014, beaucoup de paramètres entrent en jeux. Mais en tenant compte des performances accrues de la TempDB, du nouvel estimateur de cardinalités, du SELECT INTO parallélisé, du Buffer Pool Extension, du gouverneur de ressources qui gère les IOs, et bien sur Hekaton, nul doute que SQL Server 2014 est né sous le signe de la performance.

Happy eager write behaviour !

Publié dans SQL Server | Tagué , , | Un commentaire

SQL 2014 – Nouvelle DMV sys.dm_exec_query_profiles

Combien de fois, dans votre vie de DBA vous êtes vous posé la question : mais que fait donc cette requête ? Où en est–elle ? Est-ce que le processus avance ou bien est-il bloqué ? Combien de  temps encore avant la fin de la requête ? Combien de lignes ont été traitées ? Est-ce que je suis en train de lire des données ou bien este ce que j’ai commencé l’opération de jointure ou d’agrégation ?

La DMV sys.dm_exec_requests était une de vos fidèles alliée pour découvrir la vérité.

Par exemple, prenons le cas d’un simple SELECT count(*) FROM dbo.FactOnlineSales. Une table de la base ContosoRetailDW que j’ai légèrement gonflée pour atteindre près de 139 000 000 d’enregistrements.

image

Et cette requête a durée 45 secondes… Pourquoi ? Que dit dm_exec_requests ?

image

Un wait de type CXPACKET. Un “problème” de parallélisme donc … Effectivement, vu le nombre de lignes, il est possible de penser que le parallélisme est la cause …

Mais si on creuse légèrement à l’aide de sys.dm_os_waiting_tasks, on s’aperçoit alors que le Thread 0 attends (CXPACKET) que les 2 threads de la requête parallélisée terminent leurs IOs (PAGEIOLATCH).

image

Légèrement plus avancé, mais il reste une question fondamentale : suis-je au tout début du traitement de la requête et puis-je aller boire un café, ou bien celle ci est sur el point de se terminer ?

Un grand pas a été franchi avec la sortie de SQL Server 2014. Une petite DMV qui passe relativement inaperçue au vue des mastodontes que sont Hekaton, AlwaysON, BPE et autres top features.

Please, welcome sys.dm_exec_query_profiles

Voyons donc ce que renvoie cette DMV lors d’une requête qui dure un peu :

SELECT node_id,physical_operator_name, 
       SUM(row_count) row_count, 
	   SUM(estimate_row_count) AS estimate_row_count, 
	   CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count) As '% compete'
FROM sys.dm_exec_query_profiles 
WHERE session_id=56
GROUP BY node_id,physical_operator_name
ORDER BY node_id;

 

image

Cool non ?

Vous savez que vous êtes en plein Cluster Index Scan, que que vous avez lu x lignes sur les y (du plan estimé). Belle indication de progrès d’une requête non ?

Il existe quand même un prérequis, et de taille : SET STATISTICS XML ON (ou SET STATISTICS PROFILE ON). Mais on n’a rien sans rien …

Pour un plan de type comportant un Nested Loop, pour lequel l’exécution est quasi complète (1 seul enregistrement locked par une autre session) :

image

image

Fini donc la pause café prétextant que vous ne savez pas où en est la progression de la requête …

Happy profiling.

Publié dans SQL Server | Tagué , , | Poster un commentaire

SQL Server 2014 – SSIS et SSDT

SSIS n’avait que peu évolué entre SQL Server2005 et SQL Server 1008R2. Cela commençait à dater. L’arrivée de SQL Server 2012 avait enfin amené un vent de fraicheur avec des nouveautés parfois anecdotiques mais franchement indispensable (le Control + Z pour annuler une action) et parfois révolutionnaire comme la notion de catalogue SSIS, d’environnement d’exécution accompagné de beaux rapports …

On peut logiquement se demander quelles sont les nouveautés pour SSIS dans SQL Server 2014 ? Je ne parlerais pas de SSAS et SSRS. Je laisse mes confrères MVP SQL porté sur la chose vous exposer tout cela.

Réponse claire et sans détour

image

OK, le message est clair !

Mais, après l’installation de SQL Server 2014, vous avez peut être remarqué que vous ne pouviez pas développer de lots SSIS, ni concevoir de solution SSAS et SSRS. Comment qualifier ce changement car depuis DTS, l’ancêtre de SSIS, un designer était fourni … OK, on ne peut pas parler de nouveauté car le produit n’est pas nouveau, mais on frôle la révolution !

Un écran du setup SQL aurait du vous mettre la puce à l’oreille :

image

Il est donc temps de se référer à ce lien qui pointe vers un site Web qui permet le téléchargement de SSDT. Attention, il existe 2 versions de SSDT, une version plutôt dédiée aux développeurs de base de données permettant de concevoir une base, faire du rétro engineering, des renommage ou changements de schémas en tout genre (cette version est inclue dans bon nombre d’éditions de Visual Studio 2013 et la mise à jour se fait de manière automatique) et une version BI.

Il faudra s’armer d’un peu de patience pour télécharger le fichier sur la page web consacrée à SSDT.

image

Notez qu’apparait une version avec Shell Visual Studio 2013. A vous de choisir la bonne version.

Une fois le fichier téléchargé, un double click permet de lancer l’extraction du fichier et dans la foulée, l’installation commence …

imageimage

Assez déroutant, on a l’impression d’ajouter une nouvelle instance SQL … Mais finalement au moment du choix des features :

image

image

Un reboot (tiens, ce n’était pas le cas avant …) et l’installation est terminée et SSDT opérationnel :

image

Well done. Happy BI.

Publié dans SQL Server, SSIS | Tagué , | Poster un commentaire

SQL Server 2014 – SELECT INTO exécuté en parallèle

Encore une petite nouveauté qui n’est pas franchement mise en avant dans SQL Server 2014, vu les enjeux que représentent Hekaton et autres fonctionnalités majeures.

Cependant, j’imagine que bon nombre d’entre vous utilisent fréquemment l’instruction SELECT INTO.

Jusqu’à présent, cette opération n’était pas parallélisée. SQL Server 2014 apporte enfin un plan d’exécution parallèle.

Tout d’abord, après avoir restauré la base ContosoRetail me permettant de travailler sur une table de 13 M d’enregistrement, je créé deux bases destination (version SQL2012 et version SQL2014) afin de mesurer le gain de performance.


CREATE DATABASE SelectInto110;
GO
ALTER DATABASE [SelectInto110] SET COMPATIBILITY_LEVEL = 110;
GO
ALTER DATABASE [SelectInto110]
	MODIFY FILE ( NAME = N'SelectInto110', SIZE = 2560000KB , FILEGROWTH = 524288KB )
GO
ALTER DATABASE [SelectInto110] 
	MODIFY FILE ( NAME = N'SelectInto110_log', SIZE = 2097152KB , FILEGROWTH = 131072KB )
GO




CREATE DATABASE SelectInto120;
GO
ALTER DATABASE [SelectInto120] SET COMPATIBILITY_LEVEL = 120;
GO
ALTER DATABASE [SelectInto120]
	MODIFY FILE ( NAME = N'SelectInto120', SIZE = 2560000KB , FILEGROWTH = 524288KB )
GO
ALTER DATABASE [SelectInto120] 
	MODIFY FILE ( NAME = N'SelectInto120_log', SIZE = 2097152KB , FILEGROWTH = 131072KB )
GO

SET STATISTICS TIME ON
GO

Ensuite, j’exécute la requête SELECT INTO.

Compatibilité SQL SERVER 2012 :

imageimage

Compatibilité SQL SERVER 2014 :

imageimage

Effectivement, le plan d’exécution est bien parallélisé lorsque l’on est en mode de compatibilité SQL 2014. Au niveau du temps d’exécution on passe de 1:40 minute à 37 secondes. Pas mal.

Faisons grossir la table d’origine pour voir ce que cela donne avec beaucoup plus de données.


ALTER DATABASE [ContosoRetailDW] 
SET COMPATIBILITY_LEVEL = 120;
GO

USE [ContosoRetailDW]
GO

INSERT INTO [FactOnlineSales]  WITH (TABLOCK)
(
	 [DateKey]
	,[StoreKey]
	,[ProductKey]
	,[PromotionKey]
	,[CurrencyKey]
	,[CustomerKey]
	,[SalesOrderNumber]
	,[SalesOrderLineNumber]
	,[SalesQuantity]
	,[SalesAmount]
	,[ReturnQuantity]
	,[ReturnAmount]
	,[DiscountQuantity]
	,[DiscountAmount]
	,[TotalCost]
	,[UnitCost]
	,[UnitPrice]
	,[ETLLoadID]
	,[LoadDate]
	,[UpdateDate]
)
SELECT [DateKey]
      ,[StoreKey]
      ,[ProductKey]
      ,[PromotionKey]
      ,[CurrencyKey]
      ,[CustomerKey]
      ,[SalesOrderNumber]
      ,[SalesOrderLineNumber]
      ,[SalesQuantity]
      ,[SalesAmount]
      ,[ReturnQuantity]
      ,[ReturnAmount]
      ,[DiscountQuantity]
      ,[DiscountAmount]
      ,[TotalCost]
      ,[UnitCost]
      ,[UnitPrice]
      ,[ETLLoadID]
      ,[LoadDate]
      ,[UpdateDate]
 FROM [SelectInto120].[dbo].[FactOnlineSales]
 GO 10

image

J’ai également passé mes 2 bases en mode Recovery Simple afin que le SELECT INTO passe en mode bulk afin de gagner un peu de temps (et d’espace dans le LDF).

Près de 19 minutes (le SSD est à bout de souffle, désolé)

image

Contre 9 minutes …

image

Encore une fois, le gain est intéressant, mais le résultat est un peu faussé pars les perfs limitées de mon SSD qui est en train de rendre l’âme. En même temps, les 139 M d’enregistrements pèsent près de 19GB non compressés (la table d’origine est compressée niveau page et l’espace disques est de plus de 21GB). Je pense qu’un bon sous-système disque améliorerait encore le gain de perf. Car la CPU est bien utilisée lors su SELECT INTO :

image

Cool. Le premier moteur de SQL Server se voit ainsi bel et bien amélioré au niveau des perfs. Qu’en est-il des 2 autres moteur ???

Ben oui, souvenez vous, la technologie xVelocity, appliquée au columnstore index et Hekaton permettent de disposer de 3 moteurs dans SQL Server, et le passage de l’un  à l’autre, voire l’utilisation simultanée des 3 se fait en toute transparence.

Sachant que le SELECT INTO crée automatiquement la table destination, il n’est pas possible des tester le scénario ColumnStore Index table en destination.

Je créé donc une nouvelle table dans chacune des bases de test pour avoir une source de données :


CREATE TABLE FactOnlineSalesColumnStore
(
	[OnlineSalesKey] [int] NOT NULL,
	[DateKey] [datetime] NOT NULL,
	[StoreKey] [int] NOT NULL,
	[ProductKey] [int] NOT NULL,
	[PromotionKey] [int] NOT NULL,
	[CurrencyKey] [int] NOT NULL,
	[CustomerKey] [int] NOT NULL,
	[SalesOrderNumber] [nvarchar](20) NOT NULL,
	[SalesOrderLineNumber] [int] NULL,
	[SalesQuantity] [int] NOT NULL,
	[SalesAmount] [money] NOT NULL,
	[ReturnQuantity] [int] NOT NULL,
	[ReturnAmount] [money] NULL,
	[DiscountQuantity] [int] NULL,
	[DiscountAmount] [money] NULL,
	[TotalCost] [money] NOT NULL,
	[UnitCost] [money] NULL,
	[UnitPrice] [money] NULL,
	[ETLLoadID] [int] NULL,
	[LoadDate] [datetime] NULL,
	[UpdateDate] [datetime] NULL
);
GO

CREATE CLUSTERED COLUMNSTORE INDEX CCI_OnlineSalesKey 
ON FactOnlineSalesColumnStore;
GO

Une satisfaction : le poids de cette table de près de 139 M d’enregistrements est passé de 3,8GB en mode rowstore page compressées à 1,6GB avec le columnstore index.

image

Pour info, non compressée cette table pèse 21,7GB. Beau ration de compression donc, mais attention, au vu des données de test, ce n’est pas forcément très représentatif …

image

image

Le SELECT INTO fonctionne donc parfaitement en mode parallélisé avec une source de type columnstore.

Effectivement, côté CPU …

image

Que se passe t’il avec des tables Hekaton ?

Etant donné que je dispose de peu de mémoire sur ces VMs et que pour Hekaton, une table doit être contenue entièrement en mémoire, je me vois obligé de limiter le nombre d’enregistrements. Totalement arbitrairement, je choisis les premiers 2 000 000.

Tout d’abord, un peu de préparation au niveau des bases de données. Encore une fois, sachant que le SELECT INTO crée automatiquement la table destination, il n’est pas possible des tester le scénario Memory Optimized Table en destination.



ALTER DATABASE SelectInto120 
ADD FILEGROUP [SelectInto120_mod] CONTAINS MEMORY_OPTIMIZED_DATA
GO

ALTER DATABASE SelectInto120 
ADD FILE(NAME = 'SelectInto120_mod_dir', FILENAME='e:\data\SelectInto120_mod') 
TO FILEGROUP [SelectInto120_mod]
GO

CREATE TABLE FactOnlineSalesHekaton
(
	[OnlineSalesKey] [int] NOT NULL  PRIMARY KEY NONCLUSTERED HASH 
                WITH (BUCKET_COUNT=20000000),
	[DateKey] [datetime] NOT NULL,
	[StoreKey] [int] NOT NULL,
	[ProductKey] [int] NOT NULL,
	[PromotionKey] [int] NOT NULL,
	[CurrencyKey] [int] NOT NULL,
	[CustomerKey] [int] NOT NULL,
	[SalesOrderNumber] [nvarchar](20) NOT NULL,
	[SalesOrderLineNumber] [int] NULL,
	[SalesQuantity] [int] NOT NULL,
	[SalesAmount] [money] NOT NULL,
	[ReturnQuantity] [int] NOT NULL,
	[ReturnAmount] [money] NULL,
	[DiscountQuantity] [int] NULL,
	[DiscountAmount] [money] NULL,
	[TotalCost] [money] NOT NULL,
	[UnitCost] [money] NULL,
	[UnitPrice] [money] NULL,
	[ETLLoadID] [int] NULL,
	[LoadDate] [datetime] NULL,
	[UpdateDate] [datetime] NULL
)  WITH (MEMORY_OPTIMIZED=ON);
GO

image

24 secondes pour recopier 2 000 000 d’enregistrements d’une table columnstore dans une table Hekaton (Durable de surcroit), c’est pas si mal que ça.

Et 14 secondes pour passer de la table Hekaton à la table rowstore (disk based). Assez performant, mais malheureusement pas parallélisé.

image

 

En conclusion, nous pourrons retenir que le SELECT INTO est parallélisé en mode de compatibilité 120 (SQL 2014) lorsque la table source est une table disk based ou une table columnstore. Mais ce n’est pas le cas pour une table Hekaton.

Tiens, j’imagine bien quels vont être mes prochains benchmarks … Sourire

Enjoy !

Publié dans SQL Server | Tagué , , , | Un commentaire

SQL 2014 – Création d’index inline

Vous n’êtes pas sans savoir que SQL Server 2014 permet maintenant de travailler avec les columnstore index en mise à jour. Avant, il fallait soit droper l’index soit jouer avec le switch de partitions.

Cela, ajouté à tout le InMémory (Hekaton) fait qu’une petite nouveauté de syntaxe est passé quasi inaperçu : la possibilité de créer un index en ligne, donc lors de la création de la table. Et que ce soit pour un index cluster ou non cluster pour une disk based table.

Auparavant, vous écriviez :

   1:  

   2: CREATE TABLE Person

   3: (

   4:     ID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID() PRIMARY KEY NONCLUSTERED,

   5:     Name      varchar(50),

   6:     FirstName varchar(50),

   7: );

   8: GO

   9:  

  10: CREATE CLUSTERED INDEX CI_Name

  11: ON Person (Name);

  12: GO

  13:  

  14: CREATE NONCLUSTERED INDEX NCI_FirstName

  15: ON Person (FirstName);

  16: GO

Vous pourrez a présent écrire :

   1: CREATE TABLE PersonSQL2014

   2: (

   3:     ID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID() PRIMARY KEY NONCLUSTERED,

   4:     Name      varchar(50) INDEX CI_Name       CLUSTERED,

   5:     FirstName varchar(50) INDEX NCI_FirstName NONCLUSTERED,

   6: );

   7: GO

Cool non ? Cela devrait raccourcir bien des scripts de mise en production.

Vous pourrez intégrer les options “WITH” et “ON” comme le stipule la documentation en ligne.

   1: <column_index> ::= 

   2:  INDEX index_name [ CLUSTERED | NONCLUSTERED ]

   3:     [ WITH ( <index_option> [ ,... n ] ) ]

   4:     [ ON { partition_scheme_name (column_name ) 

   5:          | filegroup_name

   6:          | default 

   7:          }

   8:     ] 

   9:     [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]

 

Par contre, il ne sera pas possible de créer des index avec colonnes incluses ou des index filtrés sous ce formalisme. Il faudra revenir à une déclaration séparée.

Happy script shrinking ….

Publié dans SQL Server | Tagué , | 2 Commentaires

SQL Server 2014 – Managed backup

Lors des techdays 2014, j’avais parlé des backups automatiquement gérés par SQL Server.

L’idée de base est de ne pas se préoccuper de la stratégie de sauvegarde ! Mais confier celle ci au système, qui sera, en somme, capable de s’autogérer. Les sauvegardes étant alors effectuées “quand il faut”, en fonction de la charge.

Via des commandes T-SQL, dont j’ai déjà parlé dans un précédent billet , il est possible de configurer les backup managés niveau instance ou niveau base.

Le Management Studio SQL Server 2014 propose directement la possibilité de configurer et activer simplement le backup managé niveau instance.

La configuration se fait de manière très simple au travers d’un click droit sur Managed backup dans l’onglet Management.

SNAGHTML5f78a99

Ensuite, il suffit de renseigner les informations relatives au credential et à l’URL de stockage Azure. Pour cela, référez vous pour leur création via TSQL.

image

Vous spécifiez ensuite le seul paramètre requis pour le managed backup, à savoir la durée de rétention ! Notez que j’ai créé mon credential précédemment au travers d’un script SQL tel que celui ci.

   1: USE [master]

   2: GO

   3: CREATE CREDENTIAL [AzureSQLBackup] 

   4: WITH IDENTITY = N'sqlbackupconseilit', 

   5:      SECRET = N'blablablabla'

   6: GO

image

Eventuellement, vous pouvez chiffrer vos backups via un certificat. Je ne reviendrais pas sur cette option que je vous conseille vivement.

La configuration du smart backup va se faire au travers de différentes procédures stockées dans MSDB

image

 

Il ne reste ensuite qu’a activer le managed backup

imageimage

A ce point, la backup managé est configuré et opérationnel niveau instance , équivalemment T-SQL de

   1: EXEC smart_admin.sp_set_instance_backup @enable_backup = 1

   2: GO

Le fonctionnement semble faire appel à des procédures et fonctions au nom relativement évocateur : autoadmin_ …

imageimage

Rien ne transparait au niveau de l’agent SQL lorsque la fonctionnalité est activé. Il est probable que l’on fasse un peu appel à la CLR :

Task Assembly Name : Microsoft.SqlAutoAdmin.AutoBackupAgent.dll
Class Name : Microsoft.SqlServer.SmartAdmin.SmartBackupAgent.SmartBackup

Et surtout un développeur qui a oublié de mettre un application name dans la chaine de connexion !!! Hum hum, et alors les revues de code ????

image

SmartBackup, je veux bien. Mais par contre, faudra peut être faire un choix : smart_admin ou bien autoadmin. Cela mérité simplification ou en tous cas, merci d’expliquer la différence, sinon on risque de se retrouver avec des noms différents pour des fonctions liées à une même fonctionnalité. Et ensuite on oublie !

Exemple, dans la RTM de SQL 2014, une fonction scalaire qui fait référence à Yukon (SQL Server 2005 pour ceux qui prendraient le train en marche).

image

Je m’égare, le but n’est pas de décompiler la DLL ni de comparer les niveaux extrêmement disparates de commentaire dans les procédures stockées système.

Un peu de patience, donc, et votre backup devrait arriver sur votre compte de stockage Azure :

image

Note : j’ai eu un comportement assez étrange. Si une base existait avant la mise en place du managed backup, alors, celle ci n’était pas sauvegardée. Pour une base créée après la mise en place du smart backup, tout fonctionne parfaitement.

Ce point reste à confirmer / informer par des tests plus poussés.

Ensuite, les sauvegardes s’enchaines naturellement, sans action de votre part :

image

image

Pour la restauration, ne changez pas vos habitudes, faites appel à l’historique des backups, dans la MSDB, si vous restez sur la même instance et qu’il n’y a pas eu de soucis avec MSDB. Un bon vieux click-droit / restore database fonctionne parfaitement. Et même le backup tail of the log est conservé avec une sauvegarde vers votre compte Azure.

imageimageimageimage

Vous pouvez également interroger la DMF fn_backup_instance_config pour savoir si la fonctionnalité est activée

   1: SELECT *

   2: FROM msdb.smart_admin.fn_backup_instance_config() 

   3: GO

 

Pour terminer, désactiver le backup managé est extrêmement simple, une fois encore :

image

Ce qui correspond à la requête

   1: EXEC [msdb].[smart_admin].[sp_set_instance_backup] @enable_backup = 0;

   2: GO

 

Est-ce que la fonctionnalité va être utilisée : bonne question. Il faut bien avoir en tête que cela peut demande run peu de bande passante si votre serveur est OnPremise.

Si votre serveur est dans une VM Windows Azure (Oups, Microsoft Azure), dans tous els cas, j’opterais pour un backup to URL. Mais a savoir si je choisirais l’option Managed backup ou le plan de maintenance, je n’ai pas encore fait mon choix.

On ne peut pas nier qu’un bel effort à été fait pour rendre la fonction facile d’emploi et transparente. Presque trop. Il manque quelques Reports à mon gout.

Je trouve dommage aussi que le Managed backup niveau base ne soit pas accessible aussi simplement via l’interface. Il reste la possibilité de tout configurer via T-SQL, mais ça aurait été assez sympa de nous préparer quelques écrans ou wizards. Peut être je suis passé à côté. Peut être cela viendra plus tard …

En attendant, happy (managed) backups !

Publié dans SQL Server | Tagué , , | Poster un commentaire

Installation SQL Server 2014

SQL Server 2014 est à présent RTM. Vous pouvez télécharger et installer cette version, ou bien vous rendre sur Windows Azure afin de profiter encore plus rapidement de cette dernière mouture.

Oui M’sieur, Windows Azure propose déjà des VMs avec la version RTM.

image

Si vous avez choisi l’option téléchargement, voici les captures d’écran de l’installation. Pas grand chose de nouveau par rapport à un SQL Server 2012.

image

Tiens, sur le premier écran, je n’avais pas souvenir de cette option : obtenir SSQL Server Data Tools, ou SSDT pour les intimes, ou BiDS, pour ceux qui sont restés bloqués sur SQL Server 2008R2 et antérieurs.

En effet, depuis un certain temps, SSMS (Management Studio) est disponible gratuitement en téléchargement.

Il en est de même pour SSDT, dont la version téléchargeable sur le Web est bien plus évoluée que la version fournie avec SQL Server 2012. Un upgrade la rend même compatible SQL Server 2014, oui déjà … Pas très étonnant donc de retrouver un lien pour installer SSDT qui renvoie sur la page de download.

image

Cela explique la disparition de la fonctionnalité SSDT dans l’écran de sélection

image

Pour ceux qui voudrait les copies d’écran, voici la liste complète :

imageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimage

Quelques minutes de patience et le tour est joué.

Peu de nouveauté dans l’interface graphique, mis a part une information sur Hekaton et un onglet sur les Managed backups, dont j’ai parlé aux Techdays 2014 (vidéo ici).

image

Dans l’écran d’option des bases de données, on retrouve les nouveautés de SQL Server 2014 comme la lise à jour incrémentale des statistiques ou la durabilité (liée à Hekaton)

imageimage

Jusqu’a présent il n’y avait que 3 niveaux de compatibilité. Ici nous disposons de 4 …

image

Bref vous ne serez pas dépaysé par l’interface graphique …

Vivement les premières mises en production …

Publié dans SQL Server | Tagué , | Poster un commentaire

SQL Server 2014 RTM

Enfin. Pour les abonnés Technet / MSDN, SQL Server est enfin disponible au téléchargement …

image

L’info a probablement été déjà mainte fois relayée sur les Blogs de mes confrères MVP SQL Server FR (dont un petit nouveau … à suivre), mais je rentre à l’instant de chez un client et il ne m’était pas possible de ne pas relayer cette info.

Alors …. Qui sera le premier client à me demander une mise en prod de SQL Server 2014 ? J’en ai loupé une de peu, le WE dernier …. Les paris sont ouverts !

En attendant, que le download ne se termine, petit récapitulatif sur les grosses nouveautés du moteur :

Happy download

Publié dans SQL Server | Tagué , | 3 Commentaires

Windows Server 2012 R2 and Windows Server 2012 TechNet Library Documentation

Un petit PDF (110MB) a lire pour les longues soirées d’hiver… Près de 8000 pages de documentation sur Windows 2012R2 et Windows 2012 issues du Technet ! Rien que la table des matières, près de 350 pages quand même, occupera les premières semaines !

image

Pour le téléchargement, cela se passe ici.

Publié dans Windows | Tagué | Poster un commentaire