270 likes | 519 Views
Ásó, kapa, SQL Server Üzemeltetési praktikák a mindennapokra. B itemo Erik Gergely erik@bitemo.hu http://www.rollback.hu DBA Expert Disney Interactive Media Group. Miről lesz szó?. SQL Server – 2000 , 2005 , 2008* Best practices, nem kinyilatkoztatás Főleg üzemeltetői szemszögből
E N D
Ásó, kapa, SQL ServerÜzemeltetési praktikák a mindennapokra Bitemo Erik Gergelyerik@bitemo.hu http://www.rollback.hu DBA Expert Disney Interactive Media Group
Miről lesz szó? • 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és • Mazsolázás
Első lépés – mentsünk gyorsan SELECT database_name, [type], max(backup_start_date) last_backup FROM backupset GROUP BY database_name, [type] ORDER BY database_name, [type]
Második lépés – mentsünk szépen • 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
Harmadik lépés - monitorozzunk • 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
Negyedik lépés – monitorozzunk még • 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
Ötödik lépés – teljesítmény • 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)
Telepítés és vidéke I. • Hardver • 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
Telepítés: melyik editiont válasszuk? • 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
Kezdeti konfiguráció • 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
Változik az alkalmazás I. • Vessük össze a scriptet a feketelistánkkal, pl. • Új táblák/oszlopok hozzáadásánál nincs index/foreign key • @@IDENTITY – általában a SCOPE_IDENTITY() jobb • Ha van naplózó trigger a táblán, akkor becsaphat a @@IDENTITY • 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
Változikazalkalmazás II. • (még mindig feketelista) • Nagy táblán add column not null • Egyetlen tranzakcióban update-eli az összes sort, kb. <tábla*2> 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
Olvasson Ön is Books Online-t! • Dokumentáció • Áttekintések • Architektúra • Fejlesztői útmutatások • Üzemeltetési leírás • Tutorial-ok • Keresés
Változik az alkalmazás III. • 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 <sorok száma> 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
Változik az alkalmazás IV. • 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
Változik az infrastruktúra • Rendszeradatbázisok mentése • SELECT @@VERSION – tudjuk, hogy honnan indulunk • Olvassuk el a telepítési leírást • Hogyan kell feltenni a patchet • Hogyan lehet levenni a patchet
Mazsolák I. • 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
Mazsolák II. • 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
Mazsolák III. • 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 • BEGIN TRAN • UPDATE Cim SET Orszag = NULL • COMMIT • SELECT @@TRANCOUNT – itt még egy • COMMIT – ezután már nulla lesz
Tanuljunk az SQL Servertől! • Nézzük meg a rendszertárolteljárásokdefinícióit • Profilerezzük a Management Studiót
Útravalók • Books Online (Shift+F1) • Internet is van a világon • Technet portál: http://www.microsoft.hu/technet • Books Online online • SQL 2000 index defragmentation cikk (angol): http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/ss2kidbp.mspx • PowerShell (további linkekkel): http://www.microsoft.com/hun/techNet/?article=68a16f06-863f-400b-9963-86ad749ef969 • Blogok SQL-ről és hasonlókról magyarul: http://soci.hu, http://www.rollback.hu • Kedvenc SQL blogom (angol): http://www.sqlskills.com/blogs/paul/ • Codeplex – open source a nagyon kísérletezőknek (angol): http://www.codeplex.hu • Inside SQL könyvek (igazi mélyvíz)