<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cap Data Team SGBD Blog : Oracle, SQL Server, MySQL, Sybase... &#187; configuration</title>
	<atom:link href="http://blog.capdata.fr/index.php/tag/configuration/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.capdata.fr</link>
	<description>Le blog technique sur les bases de données de CAP DATA Consulting</description>
	<lastBuildDate>Wed, 01 Feb 2012 17:21:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Règles d&#8217;installation de base (épisode 2)</title>
		<link>http://blog.capdata.fr/index.php/regles-d%e2%80%99installation-de-base-episode-2/</link>
		<comments>http://blog.capdata.fr/index.php/regles-d%e2%80%99installation-de-base-episode-2/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 09:24:15 +0000</pubDate>
		<dc:creator>David BAFFALEUF</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[installation]]></category>

		<guid isPermaLink="false">https://www.alldb.fr/blogs/?p=223</guid>
		<description><![CDATA[Suite de l&#8217;épisode précédent.
Une fois le matériel commandé, livré, déballé, racké, etc&#8230;, il va falloir installer Windows et SQL Server. Là encore il va falloir regarder certains détails de près :
Paramétrage de Windows Server:
Préparation des disques:
On l&#8217;a dit dans l&#8217;épisode 1, le disque c&#8217;est le nerf de la guerre. Je vais donc apporter un soin [...]]]></description>
			<content:encoded><![CDATA[<p>Suite de l&#8217;épisode <a href="http://blog.capdata.fr/?p=130">précédent</a>.</p>
<p>Une fois le matériel commandé, livré, déballé, racké, etc&#8230;, il va falloir installer Windows et SQL Server. Là encore il va falloir regarder certains détails de près :</p>
<h2>Paramétrage de Windows Server:</h2>
<h3><strong>Préparation des disques</strong>:</h3>
<p>On l&#8217;a dit dans l&#8217;épisode 1, le disque c&#8217;est le nerf de la guerre. Je vais donc apporter un soin particulier à la configuration de mes axes.</p>
<p><strong>Pour placer sur disque une base de données transactionnelle, on essaie de considérer deux règles de base:</strong></p>
<ul>
<li><strong> Toujours séparer physiquement le fichier de données du journal de transactions</strong>: pour deux raisons. La première pour la sécurité des données: si je perds mon disque de données, j&#8217;ai besoin d&#8217;avoir accès au journal pour récupérer les dernières transactions validées mais pas encore prises par le backup log. La seconde pour des raisons de performances: le critère qui pèse le plus dans le temps de service d&#8217;un disque, c&#8217;est le déplacement de la tête au dessus de la bonne piste (<em>seek time</em>). Les accès aux données sont de nature aléatoire et donc augmentent cette latence de recherche. En revanche, les accès sur le journal sont séquentiels, donc limitent le seek time car une fois la tête positionnée sur la bonne piste / bon secteur, elle glisse tranquillement pour lire (recovery) ou écrire (commit / checkpoints) sur les secteurs adjacents. Mélanger les deux, ça plombe les accès au journal, et sur une instance OLTP, on sait que l&#8217;accès en écriture sur le journal est critique car il conditionne le temps de réponse du commit.</li>
</ul>
<ul>
<li><strong>Toujours séparer </strong><strong>physiquement </strong><strong>les données des sauvegardes</strong>: pour une raison évidente de sécurité des données, mais il faut y penser avant d&#8217;avoir un problème. Et par défaut jusqu&#8217;en SQL Server 2005, tout allait dans ~MSSQL\Data et ~MSSQL\Backup.</li>
</ul>
<p><strong>Séparer physiquement</strong>, ça veut dire <strong>PAS</strong> sur les mêmes disques. Ce n&#8217;est pas parce que j&#8217;ai trois lecteurs E:\, F:\ et G:\ que j&#8217;ai trois disques, il faudra le vérifier avec la console de gestion des volumes (diskmgmt.msc) et avec votre ami l&#8217;administrateur système en charge du stockage pour vérifier s&#8217;il ne vous a pas refilé 3 LUNs découpées dans le même diskgroup. Si je reprends mon Proliant DL 580 G5  avec ses 16 slots:</p>
<p style="text-align: center;"><img class="size-full wp-image-326 aligncenter" src="http://blog.capdata.fr/wp-content/uploads/2010/01/proliant4.png" alt="proliant" width="633" height="393" /></p>
<p>Je me paye même le luxe d&#8217;avoir un RAID10 pour placer mes filegroups d&#8217;indexes, comme sur Oracle. Cela dit, la bagarre va être rude parce que tout le monde pense que l&#8217;espace disque est gâché, surtout pour ce qui concerne les journaux de transactions, où on va utiliser peut être 20% de l&#8217;espace alloué. Mais il faut le voir comme un investissement. Vous aurez des temps de service garantis de moins de 4 ms en écriture sur le commit, et le nombre de transactions par seconde va en bénéficier. C&#8217;est une réalité, on voit des exemples de ce type régulièrement chez nos clients. <em> </em></p>
<p>Une fois les axes définis et montrés à la machine, la première chose va être de partitionner le disque en alignant sur le 128ième secteur (=64K), sous diskpart:</p>
<pre><span style="color: #0000ff;">diskpart&gt; create partition primary align=64</span></pre>
<p>Globalement, il faut savoir que jusqu&#8217;en version 2003 incluse, Windows continue de préréserver les 63 premiers secteurs d&#8217;un disque pour y stocker son MBR (master boot record). Lorsque l&#8217;on va formater ensuite le file system en 64K, le premier offset va commencer réellement sur le 63ième secteur et décaler les clusters NTFS de 512 octets (1 secteur). il faut que les écritures de SQL Server (64K) soient alignées avec le début de la partition. Pour davantage d&#8217;infos, voir l&#8217;<a href="http://mikedavem.developpez.com/sqlserver/tutoriels/architecture/">article</a> de David BARBARIN sur le sujet.</p>
<p><strong>En deux étapes:</strong></p>
<ul>
<li>Partitionner le disque en alignant sur le 128ième secteur.</li>
<li>Puis créer un FS en NTFS avec un cluster size de 64K pour les disques de données et de journaux.</li>
</ul>
<p>Il faudra aussi aller vérifier que la politique d&#8217;écriture est bien en write-through au niveau du cache du contrôleur disque. Cet exemple sous OpenManage:</p>
<p style="text-align: center;"><img class="size-full wp-image-333 aligncenter" src="http://blog.capdata.fr/wp-content/uploads/2010/01/openManage_WriteThrough1.jpg" alt="openManage_WriteThrough1" width="427" height="145" /></p>
<h3><strong>Paramètres noyau de Windows pour SQL Server:</strong></h3>
<p>Pas grand chose à faire dans 99% des cas. Il faut valider que le bail (<em>quantum</em> en anglais) par thread est bien de type &#8216;long&#8217; dans les performances avancées de la machine (<em>Poste de Travail -&gt; Properties -&gt; Advanced -&gt; Performance -&gt; Advanced</em>):</p>
<p style="text-align: center;"><img class="size-full wp-image-295 aligncenter" src="http://blog.capdata.fr/wp-content/uploads/2010/01/processsched.png" alt="processsched" width="331" height="111" /></p>
<p>Background services =&gt; chaque thread a le droit de s&#8217;exécuter pendant 12 ticks d&#8217;horloge avant d&#8217;être interrompu par le Dispatcher.  Par défaut sur la gamme Server, le radiobutton doit être sur background services (quantum = 12 ticks d&#8217;horloge) et sur la gamme workstation, sur Programs (quantum = 2 ticks d&#8217;horloge). En général pour tous les SGBD, le quantum doit être plus long pour limiter le nombre de changements de contexte opérés par le système d&#8217;exploitation. Pour plus de détails, voir cet <a href="http://blog.capdata.fr/?p=159">article</a>.</p>
<p>Il faudra aussi aller vérifier que les ressources allouées seront en priorité sur les programmes générant beaucoup d&#8217;IOs comme SQL Server (<em>Connexions réseau, clic-droit sur l&#8217;interface réseau -&gt; Properties-&gt; File and Printer Sharing (et oui !) -&gt; Properties</em>):</p>
<p style="text-align: center;"><img class="size-full wp-image-298 aligncenter" src="http://blog.capdata.fr/wp-content/uploads/2010/01/maximizethroughput.jpg" alt="maximizethroughput" width="381" height="191" /></p>
<p>Maximize throughput for network applications: sous entendu on n&#8217;est pas là pour faire du partage de fichiers.</p>
<p>Et éviter l&#8217;utilisation des antivirus autant que possible.</p>
<h3>Compte de service pour SQL Server et l&#8217;agent:<em> </em></h3>
<p>Le compte de service est le compte déclaré au niveau de la machine ou du domaine pour supporter l&#8217;exécution de SQL Server et l&#8217;ensemble de ses interactions avec le système: poster des IOs, atteindre des machines sur le réseau, écrire dans un fichier de sauvegarde, etc&#8230; Toutes ces actions seront donc exécutées sous le contexte de droits du compte de service.  Dans la plupart des cas, les SQL  Server sont démarrés sous le contrôle des comptes systèmes locaux (LOCAL SYSTEM) avec lesquels sont lancés la plupart des modules de windows exécutés en mode user (smss.exe, crss.exe, lsass.exe, winlogon.exe, etc&#8230;). Et négligence du  DBA, on trouve aussi des SQL Server démarrés sous le compte Administrateur local voire de domaine, ce qui du point de vue sécurité  n&#8217;est pas vraiment l&#8217;idéal.</p>
<p>Et bien depuis la version SQL Server 2005, il n&#8217;y a plus d&#8217;excuse: on créé simplement des comptes utilisateurs locaux ou de domaine sans privilège *** pour SQL Server et SQL Agent (je ne parle pas de SQL Browser puisque du point de vue sécurité, on ne doit pas l&#8217;utiliser **), on les passe ensuite à l&#8217;assistant d&#8217;installation qui créé des groupes avec les droits appropriés, et y intègre les comptes qui héritent du coup des droits strictement nécessaires.</p>
<h2>Éléments à définir avant l&#8217;installation de SQL Server :</h2>
<p>Avant de lancer le setup,il faut réfléchir à quelques éléments caractéristiques de l&#8217;instance que l&#8217;on souhaite installer:</p>
<h3>Instance locale / instance nommée:</h3>
<p>L&#8217;instance locale est l&#8217;instance que l&#8217;on créé par défaut sur une machine. Elle prend par défaut le nom de la machine et le port 1433 attribué par l&#8217;IANA. On ne peut donc en créer qu&#8217;une seule par machine. Ma chaîne de connexion ressemblera à :</p>
<pre><span style="color: #0000ff;">sqlcmd -Udba_exploit -w1000 -S PIXIES </span></pre>
<p>Où PIXIES est le nom de ma machine, et donc le nom de mon instance locale par la même occasion. Maintenant, lorsqu&#8217;on souhaite en installer plus d&#8217;une par machine, on pourra utiliser les instances nommées, dont le nom sera constitué d&#8217;un préfixe (nom de la machine hôte) et d&#8217;un suffixe (nom de l&#8217;instance à choisir) séparés par un backslash (&#8216;\&#8217;). Dans ce cas, ma chaîne de connexion ressemblera à :</p>
<pre><span style="color: #0000ff;">sqlcmd -Udba_exploit -w1000 -S PIXIES\SQL1 </span></pre>
<p>Où SQL1 sera le nom de nom instance nommée. Autre différence majeure, le port de démarrage sera défini dynamiquement. Ce qui signifie qu&#8217;il peut changer entre deux redémarrages, donc problème de firewall à l&#8217;horizon. Pour l&#8217;éviter, il faudra fixer le port de démarrage de l&#8217;instance dans les propriétés TCP, et redémarrer SQL Server. **</p>
<h3>Collation:</h3>
<p>La collation va définir la manière de coder les caractères dans ma base de données. Là aussi le sujet est vaste et largement débattu sur le net. Il faut simplement réfléchir aux types de champs texte que mon application va devoir stocker et choisir le codepage approprié. Il faut essayer de prendre le codepage le plus large possible. Lors de l&#8217;installation en SQL Server 2005, deux types de collations sont proposées: les collations windows et les collations SQL Server. En fait la seconde est incluse pour compatibilité vers les versions précédentes, et ne doit donc être utilisée que pour assurer la compatibilité lors d&#8217;une migration. Il vaut mieux essayer de partir avec une collation Windows dès le départ, elles sont plus riches et plus précises, notamment lorsqu&#8217;on utilise à la fois des colonnes UNICODE et NON-UNICODE, car la collation windows sait convertir du NON-UNICODE à la volée.  Changer la collation à tous niveaux n&#8217;est pas une opération de routine: au niveau de l&#8217;instance, il faudra la reconstruire, au niveau de la base c&#8217;est plus <a title="Changer la collation d'une base" href="http://blog.capdata.fr/?p=222">épique encore.<br />
</a></p>
<h3>Mode d&#8217;authentification:</h3>
<p>Deux solutions:</p>
<ul>
<li><em><strong>Le mode intégré</strong></em>: l&#8217;authentification se fait par une autorité telle qu&#8217;un contrôleur de domaine ou la machine locale. Avantage, SQL Server ne stocke pas de mot de passe, côté sécurité c&#8217;est la meilleure option. Inconvénient, lorsqu&#8217;on souhaite atteindre depuis son application cliente une instance qui n&#8217;est pas dans le même domaine, ou simplement une machine en workgroup, l&#8217;authentification intégrée ne fonctionnera pas.</li>
<li><em><strong>Le mode mixte:</strong></em> donc on sera obligé de permettre aussi de créer et d&#8217;utiliser  des comptes et des mots de passe dans SQL Server. En mode mixte, on se connecte soit avec un compte windows, soit avec un compte SQL Server.</li>
</ul>
<p>Les bonnes pratiques de sécurité préconisent de rester en mode intégré, mais ce n&#8217;est n&#8217;est bien souvent pas très pratique, et donc pas appliqué. Il vaut mieux autoriser le mode mixte mais désactiver le compte sa, et faire appliquer la politique de mots de passe de Windows.</p>
<p>Une fois ces étapes validées, l&#8217;installation peut commencer. Le travail de préparation est terminé.</p>
<p>A bientôt !</p>
<p><em><strong>* </strong>Dans cet exemple, on choisit de faire les backups sur un partage CIFS</em><br />
<em><strong>** </strong>Je ne parle pas de sécurité dans cet article, le sujet est vaste et fera l&#8217;objet d&#8217;un prochain post.<br />
<strong>*** </strong>Penser à cocher le compte n&#8217;expire jamais pour les comptes de service. </em></p>
<p>[ David B. ]</p>
<p><script type="text/javascript" src="http://tcr.tynt.com/javascripts/Tracer.js?user=d4FlbGI04r35lZadbi-bpO"></script><strong>Continuez votre lecture sur le blog :</strong>
<ul class="similar-posts">
<li><a href="http://blog.capdata.fr/index.php/modes-de-recuperation-et-journal-de-transactions-episode-2/" rel="bookmark" title="11 décembre 2008">Modes de récupération et journal de transactions, épisode 2</a> (David BAFFALEUF) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/scripting-et-smo-suite-scripter-les-objets-directement-en-t-sql/" rel="bookmark" title="3 août 2010">Scripting et SMO (suite): scripter les objets directement en T-SQL</a> (David BAFFALEUF) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/formation-optimisation-de-requetes/" rel="bookmark" title="22 septembre 2010">Formation Optimisation de requêtes</a> (David BAFFALEUF) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/insert-et-update-en-une-seule-fois-cest-possible-merge/" rel="bookmark" title="26 mars 2010">Insert et Update en une seule fois avec MERGE</a> (Guillaume DEFENDINI) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/openrowset-episode-1/" rel="bookmark" title="13 juillet 2011">OPENROWSET, épisode 1</a> (David BAFFALEUF) [SQL Server]</li>
</ul>
<p><!-- Similar Posts took 3.053 ms -->
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fregles-d%25e2%2580%2599installation-de-base-episode-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fregles-d%25e2%2580%2599installation-de-base-episode-2%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.capdata.fr/index.php/regles-d%e2%80%99installation-de-base-episode-2/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

