SQL Server – 2000, 2005, 2008* Best practices, nem kinyilatkoztatás Főleg üzemeltetői szemszögből Tematika: A legfontosabb lépések Egy szerver telepítése és konfigurálása VáltozáskezelésMazsolázás
SELECT database_name, [type], max(backup_start_date) last_backup FROM backupset GROUP BY database_name, [type] ORDER BY database_name, [type] SELECT database_name, [type], max(backup_start_date) last_backup FROM backupset GROUP BY database_name, [type] ORDER BY database_name, [type] Miért mentsünk?Az adatbázis az üzleti alkalmazás leggyorsabban változó része Mit mentsünk?Mindent: az összes adatbázist (kivéve tempdb), ha kell, logot is Hogyan mentsünk?Gyorsan: ad-hoc backup Szépen: Maintenance Plan-ek Hova mentsünk?NE AZ ADATBÁZISOK MELLÉ – külön gép/diszk
Maintenance Plan használatával automatizálhatjuk a backup fájlok törlését is Ad-hoc mentéshez is érdemes ezt használni Szalagra / másik gépre (de legalább másik diszkre) mentsünk Ha diszkre és onnan szalagra mentünk: időzítés! Ha beállítottunk mindent, próbáljuk végig a folyamatot, és állítsuk vissza mindenképpen a backup fájlt Rendszeradatbázisokat is mentsük Minimális dokumentáció: adatbázis-motor verziószáma
Mit és hogyan mentek?
Mit? Futnak-e a service-ek? Jól van-e az alkalmazásadatbázis? (kapcsolatok, lockok, várakozások, stb.) Amit hasznosnak találunk Hogyan? Célszoftver: felügyeleti rendszer SQL Server Agent job, SQLCMD, perfcounterek PowerShell script
Olvassunk mindennap – errorlogot Nem árt néha rotálni a logot sp_cycle_errorlog Emeljük meg a megőrzött logfájlok számát (20-30 is elfér) Bármilyen error mehet az errorlogba Deadlock információk Az SQL Agent is ír logot SQLAGENT.OUT
Monitorozás alacsony költségvetéssel
Memória, diszk, processzor, hálózat Ha egy dologból kérhetek sokat: RAM Nagy I/O ellen: tömörítsünk* Triviális, de... vírusirtót tiltsuk el az SQL adatbázisfájloktól, mentési állományoktól Optimalizálás – egyes lekérdezések helyett érdemesebb átfogóan nézni – DMV-k Indexek és statisztikák karbantartása Referenciaadatok gyűjtése (baseline)
Hardver 64 bites hardverre 64 bites SQL-t 64 bites hardverre 64 bites SQL-t Instance-ok: Több SQL egy OS-en Szeparált jogosultságok Különböző verziók Különböző collation Memóriát osszuk fel az instance-ok között
Enterprise, ha kellenek a következők: online index műveletek, online restore, snapshot, adattömörítés*, backup tömörítés*, tükrözött backup*, tábla particionálás, Resource Governor*, transzparens adatbázis-titkosítás*, finomhangolható audit*, több, mint 16 instance egy gépen, hot-add CPU* és RAM, SSIS advanced transformations, nagyteljesítményű adattárház Nagy teljesítmény és nagy rendelkezésreállás SQL 2005-től lehet upgrade-elni editiont Enterprise > Standard > Workgroup > Web* > Express with Advanced Features > Express * * SQL 2008-tól
Mindenek előtt: patcheljünk! Hálózati konfiguráció Szerver és kliens oldalon : SQL Server Configuration Manager + cliconfg A kettő között: gondoljunk a tűzfalra is Állítsuk be a model adatbázist Készítsük el a rendszeradatbázisok mentését végző maintenance plant Memórialimit, ha többen vannak a szerveren
Egy új szerver
Vessük össze a scriptet a feketelistánkkal, pl. Új táblák/oszlopok hozzáadásánál nincs index/foreign key – általában a SCOPE_IDENTITY() jobb Ha van naplózó trigger a táblán, akkor becsaphat a DROP TABLE/COLUMN/PROCEDURE Többnyelvű környezetben varchar felhasználói adatokra SELECT *, masszív joinok a tárolt eljárásokban (Nem szeretem a sp_ kezdetű felhasználói tárolt eljárásokat) Nincsenek tárolt eljárások
(még mindig feketelista) Nagy táblán add column not null Egyetlen tranzakcióban update-eli az összes sort, kb. méretű logot igényelve. Bármiféle konkurrenciának beláthatatlan következményei lehetnek. SQL 2000 replikált táblán add/drop column ALTER TABLE ADD ujoszlop int – nem fog bekerülni a publikációba sp_repladdcolumn, sp_repldropcolumn a megoldás SQL 2005-től transzparens a séma módosítása replikációnál
DokumentációÁttekintésekArchitektúra Fejlesztői útmutatások Üzemeltetési leírás Tutorial-okKeresés
Nagyméretű tranzakcionális replikált tábla végigmódosítása Még az előző módszerrel is komoly terhelést ró a résztvevőkre (distribution adatbázisba rekord bekerül, ami lassítja az összes replikációt pár napig) Készítsünk módosító tárolt eljárást, és replikáljuk annak a végrehajtását
Az éles adatbázis másolatán a legjobb tesztelni (adatminőség, méret, egyedi problémák) – teszteljük a telepítést is Éles telepítésnél a database snapshot igen hasznos lehet Visszaállás kontra adatvesztés: még több snapshot Készítsünk snapshotot visszaállás előtt is
Rendszeradatbázisok mentése SELECT – tudjuk, hogy honnan indulunk Olvassuk el a telepítési leírást Hogyan kell feltenni a patchet Hogyan lehet levenni a patchet
A NOLOCK használata Alkalmazásból inkább NE snapshot Nagyobb módosító scriptek futásának monitorozására tökéletes Mikor shrinkeljünk éles adatbázist? Rendszeresen soha AUTO_SHRINK ellen DMF Élet SQL clusterrel Mindig a cluster menedzsment eszközével állítsuk le a service-eket, ha szükséges
Jobok, mentések ütemezésénél tervezhetünk karbantartási időt Pl. Mindennap 02:00 és 04:30 között NEM fut semmi – tervezett leállás után nem kell kézzel futtatni a hiányzó feladatokat SSMS 1x1 Multiserver query – ugyanaz a lekérdezés több szerveren fut SQLCMD mód – ugyanazzal a scripttel több szerveren ( átkapcsol a script futás közben) Nézzük meg a beállítható opciókat is
Tranzakció 1x1 Kevés adatot mozgató, de kritikus változtatásoknál – UPDATE/DELETE Nézzük vissza a módosítást, mielőtt COMMIT Minél rövidebb ideig tartson Ne tegyük bele a COMMIT-ot (ne futhasson le véletlenül) Figyelem! Tranzakciók egymásba ágyazhatóak BEGIN TRAN UPDATE Cim SET Orszag = NULL COMMIT SELECT – itt még egy COMMIT – ezután már nulla lesz BEGIN TRAN UPDATE Cim SET Orszag = NULL COMMIT SELECT – itt még egy COMMIT – ezután már nulla lesz
Nézzük meg a rendszer tárolt eljárások definícióit Profilerezzük a Management Studiót
Mazsolák
Books Online (Shift+F1) Internet is van a világon Technet portál: Books Online online SQL 2000 index defragmentation cikk (angol): PowerShell (további linkekkel): Blogok SQL-ről és hasonlókról magyarul: Kedvenc SQL blogom (angol): Codeplex – open source a nagyon kísérletezőknek (angol): Inside SQL könyvek (igazi mélyvíz)