|
|
Adatbázisok partícionálása
Adatbázis optimalizálás 2. rész
|
|
|
Adatbázisok teljesítménynövelésének hathatós eszköze lehet a táblák felosztása külön tagkiszolgálókra, ha lehetőségünk van rá. Többféle módja van a partícionálásnak. Körültekintő vizsgálat segítségével, megfelelő tervezéssel jelentős teljesítménynövekedést tudunk elérni alkalmazásaink vagy weboldalaink adatbázis elérését illetően.
Az adatbázisok partícionálása, azaz több darabra bontása akkor működik megfelelően, ha a tagkiszolgálón lévő adatok lekérdezéséhez az SQL utasítást közvetlenül a megfelelő tagkiszolgálóhoz címezzük. A táblák csoportokat alkotnak kapcsolataik szerint. Ha például veszünk egy személyt, akkor az ő adatai megtalálhatók egy személyi törzs adattáblában, és pl. alkalmazottakat nyilvántartó táblában is. A partíciók akkor a legeredményesebbek, ha ezek a logikailag összetartozó adatok ugyanazon a tagkiszolgálón helyezkednek el.
Szimmetrikus partíciók
A partícionálás legeredményesebb változata a szimmetrikus elosztás:
- Összekapcsolódó adatok egyazon tagkiszolgálón való elhelyezésével az SQL parancsok átirányításának szüksége csökkenthető, ha egyáltalán elő is fordul ilyen. Egy elosztott nézet tervezési célja a 80/20-as szabállyal kezdődik: tervezzük úgy a partíciókat, hogy a legtöbb SQL utasítás irányítható legyen tagszerverre, ahol legalább az adatok 80%-a helyezkedjen el, és az elosztott lekérdezéseknek 20%-nál kevesebb adatra legyen szükségük. Úgy tesztelhetjük ezt le, hogy nézzük meg, hogy vajon a partíció, ahol minden sor rendelkezésre áll, tartalmazza-e az idegen kulcsos sorokat is. Amely adatbázistervben ez megvalósul, ott érdemes partícionálni.
- Az adatok egyenletesen oszlanak el a tagkiszolgálók között. Például képzeljünk el egy országos szervezetet, amely megyékre tagolt, és a szervezet alkalmazottai csak a saját megyéjükben működhetnek, valamint az ügyfelek is a legtöbbször saját megyéjükben intézik dolgaikat. A megye, az ügyfelek és az alkalmazottak táblája felosztható megyénként. Néhány lekérdezésnek szüksége lehet több megyéből származó adatokra, de a legtöbb lekérdezést az adott szerver ki tudja szolgálni, hiszen csak a saját adatait kérték le. A felhasználó beviteli környezete alapján irányítja az alkalmazás az SQL parancsokat a megfelelő régió tagkiszolgálójához.
Aszimmetrikus partíciók
Habár ideális esetben a szimmetrikus felosztás a cél, a legtöbb alkalmazásnak bonyolult adatlekérdezési formái vannak, ami gátolja a szimmetrikus partícionálás lehetőségeit. Az aszimmetrikus partíciók eredménye, hogy néhány tagkiszolgáló nagyobb szerepet vállal a többinél. Például az adatbázisnak csak néhány táblája lehet felosztva, ennélfogva a többi, nem felosztott tábla az eredeti szerveren marad. Aszimmetrikus partíciók képesek a szimmetrikus partíciók teljesítményének nagy részét nyújtani, ami az alábbi előnyöket jelenti:
- Drámaian növeli a teljesítményt egy adatbázisnál - ahol nem lehet szimmetrikus partícionálást alkalmazni - az, ha néhány tábláját aszimmetrikusan felosztják.
- Tökéletes felosztása egy meglévő rendszernek ismétlődő aszimmetrikus fejlesztések sorozatával. Minden lépésben a felosztásra kiválasztott táblák azok, amelyek általában a legnagyobb teljesítményjavulást eredményezik.
Egy aszimmetrikus megközelítésben, az eredeti szerveren mindig marad néhány tábla, ami nem fér bele a felosztási sémába. A teljesítménye ezeknek a visszamaradó tábláknak általában növekszik az eredeti rendszerhez képest, mert a tagkiszolgálóra kerülnek a kiválasztott táblák, és ezzel csökkentik az eredeti szerver igénybevételét.
Sok adatbázis felosztható többféleképpen. A megvalósítás során választott speciális felosztásnak a legjobbnak kell lennie, hogy ezzel megfeleljen az üzleti rétegben gyakori rendszerességgel futtatatott SQL utasítások elvárásainak.
Elosztottan partícionált nézetek
Tervezhetjük úgy is a felosztást, hogy a cél kiválasztásához szabályrendszert készítünk, amit az alkalmazás használni tud, hogy eldöntse, melyik tagkiszolgálóhoz érdemes fordulnia az SQL utasításaival a legeredményesebb feldolgozás érdekében. Az üzleti szolgáltatás rétegnek össze kell vetnie a felhasználói adatokat ezekkel a szabályokkal, hogy megtalálja a megfelelő tagkiszolgálót az utasítás feldolgozáshoz.
Az alábbi négy területet kell áttekintenünk, amikor megtervezzük az elosztottan partícionált nézetek csoportját ahhoz, hogy ezt kivitelezzük elosztott adatbázis kiszolgálókon:

- Állapítsuk meg az SQL utasítások mintáit, amelyeket az alkalmazás futtat. Készítsünk egy listát a futtatott utasításokról egy tipikus feldolgozási folyamat alatt. Osszuk fel a listát SELECT, UPDATE, INSERT és DELETE kategóriákra, és rendezzük a listákat kategóriánként a futtatások gyakorisága szerint. Ha az utasítások tárolt eljárásokra hivatkoznak, akkor használjuk az alap SELECT, INSERT, UPDATE és DELETE utasításokat a tárolt eljárásokból. Ha felosztunk egy általános SQL 2000 adatbázist, használhatjuk a Profiler eszközt, hogy egy ilyen listát kapjunk. Az SQL utasításgyakoriság használata indokolt megközelítés egy tipikus online tranzakciós feldolgozásnál (OLTP), vagy Web oldal adatbázisánál, ahol az elosztottan partícionált nézetekkel tudunk a legjobban dolgozni. Ezek a rendszerek azáltal jellemezhetők, hogy sajátos SQL utasításokkal rendelkeznek, amelyek általában kis mennyiségű adatot kérdeznek le egy döntéstámogatási, vagy OLAP rendszerben, amikor a lekérdezések típusait összehasonlítjuk. Amikor minden SQL utasítás egy kis mennyiségű adathoz köthető, a használatuk gyakoriságának vizsgálata a rendszer adatforgalmának tárgyilagos megközelítését eredményezi. Több rendszerben azonban van néhány utasításcsoport, amely nagy mennyiségű adathoz köthető. Nekünk erősen kell terhelnünk ezeket a lekérdezéseket, hogy felmérjük nagyméretű adatigényeiket.
- Határozzuk meg, hogy hogyan kapcsolódnak a táblák egymáshoz. Az a szándékunk, hogy megtaláljuk azon táblák csoportjait, amelyek feloszthatók ugyanazon dimenzióban, (például résszám, vagy részlegszám) így minden sor, ami az egyedi előforduláshoz kapcsolódik ebben a dimenzióban, ugyanarra a tagkiszolgálóra kerüljön. Például meghatározhatunk egy módszert az adatbázis felosztásra régió szerint. Támogatásként minden táblánál, amelynek nincs régiószám kulcsa, el kell valahogy végezni a felosztást a régióval rokon módon. Ilyen módon egy adatbázisnál mindenütt, ahol a Vasarlok tábla nem tartalmaz régiószám oszlopot, ha a régiók valamely megyerendszer szerint definiáltak, a Vasarlok.Megye oszlopot használhatjuk a vásárlók felosztására a régióval összefüggő módon. Explicit vagy implicit távoli kulcsok lesznek az első átvizsgálandó elemek a felosztási módok keresésénél, mivel ezek kapcsolatot határozhatnak meg táblák között. Vizsgáljuk meg az explicit távoli kulcs definíciókat annak meghatározására, hogy miként használják a lekérdezések egy tábla sorait más táblában lévő sorok megtalálására. Szintén vizsgáljuk meg az implicit távoli kulcsokat, vagy annak módszerét, hogy az utasítások a sor értékei alapján hogyan kötődnek más táblákhoz a JOIN utasítás segítségével, amikor nincs meghatározott távoli kulcs definíció. Meg kell vizsgálni az alkalmazás által generált SQL utasításokat, hogy vajon van-e olyan utasítás, amely táblákat kapcsol össze nem kulcs mezőkkel, ugyanis az implicit távoli kulcsok nincsenek egyértelműen tárolva az adatbázis sémában. Ezek az implicit távoli kulcsok tipikusan indexeltek, hogy növeljék a kapcsolatok teljesítményét, tehát szintén vizsgáljuk meg az adatbázis index definícióit.
- Vessük össze az SQL utasítások gyakoriságát a távoli kulcsok vizsgálata kapcsán definiált felosztással. Válasszuk azt a felosztást, amely a legjobb támogatást nyújtja alkalmazásunk vegyes SQL utasításainak. Ha néhány táblacsoport többféleképpen is felosztható, vizsgáljuk meg az SQL utasítások gyakoriságát, hogy eldöntsük melyik partícionálás tesz eleget a legtöbb utasításnak. Azok a táblák, amelyekre az utasítások leggyakrabban vonatkoznak egyben az egyedüliek, amelyek szerint elsőként partícionálni akarunk. Rangsoroljuk a felosztásokat, amelyek a táblákra való hivatkozások gyakorisága szerint készültek. Az SQL utasítások mintái szintén befolyásolják a döntést, hogy vajon mely táblákat osszuk fel:
- Osszunk fel egy táblát, ha az utasítások több mint 5%-a egy táblára INSERT, UDATE vagy DELETE utasítással hivatkozik, és a tábla felosztható az általunk választott dimenzió szerint.
- Tartsunk teljes másolatokat a táblákról minden tagkiszolgálón, ha több mint 5%-a a táblákra vonatkozó utasításoknak INSERT, UPDATE vagy DELETE utasítás. Szintén szükséges definiálni, hogy a módosítások hogyan történjenek meg, hogy az összes másolatra is kiterjedjenek. Ha magas tranzakciós sértetlenség szükségeltetik, akkor készítsünk triggereket, amelyek elosztott módosításokat végeznek minden másolaton egy elosztott tranzakció környezetén belül. Ha ez a fajta integritás nem szükséges, akkor használjuk valamelyik replikációs mechanizmust, hogy gondoskodjunk a módosítások elterjedéséről.
- Ne osszuk fel vagy másoljuk le a táblát, ha több mint 5%-a a parancsoknak INSERT, UDATE vagy DELETE utasítás és a tábla nem osztható fel a választott dimenzióban.
- Definiáljunk SQL utasítás útválasztó szabályokat. Az útválasztó szabályoknak képeseknek kell lenniük meghatározni, hogy melyik tagkiszolgáló tudja a legeredményesebben feldolgozni az egyes SQL utasításokat. Kapcsolatot kell létesíteniük a felhasználó beviteli környezete és a tagkiszolgáló között, amely az adatok többségét tartalmazza az utasítás végrehajtáshoz. Az alkalmazásnak a felhasználó által megadott adatokat össze kell vetniük ezekkel a szabályokkal, hogy kiválasszák melyik tagkiszolgáló az illetékes a végrehajtásban.
|
Cikksorozat
| 2591 | Windows | Tippek és trükkök - RAS - Modem csengetési szám állítása | 1. rész |
| 2622 | Windows | Tippek és trükkök - Program futtatása más felhasználóként | 2. rész |
| 2640 | Windows | A Windows ikonméretének megváltoztatása és Windows 2000 Asztaltémák | 3. rész |
| 2657 | Windows | Tippek és trükkök - Internet Explorer | 4. rész |
| 2667 | Windows | Tippek és trükkök | 5. rész |
| 2684 | Windows | Alapértelmezések állítása, telepítési fájlok helye, intéző nézetek | 6. rész |
| 2696 | Windows | Biztonsági trükkök | 7. rész |
| 2702 | Windows | Windows XP trükkök | 8. rész |
| 2729 | Windows | Windows 2000 és XP tippek, trükkök | 9. rész |
| 2757 | Windows | Registry trükkök | 10. rész |
| 2784 | Windows | Tippek, trükkök | 11. rész |
| 2829 | Windows | Tippek, trükkök | 12. rész |
| 2889 | Windows | Windows XP tippek | 13. rész |
| 2909 | Windows | Tippek Windows XP-hez | 14. rész |
| 2919 | Windows | Windows tippek | 15. rész |
| 2924 | Windows | Windows tippek | 16. rész |
| 2963 | Windows | Windows tippek | 17. rész |
| 2973 | Windows | Windows Tippek | 18. rész |
| 2981 | Windows | Windows tippek | 19. rész |
| 2990 | Windows | Tippek-trükkök | 20. rész |
| 3027 | Windows | IIS tippek | 21. rész |
| 3034 | Windows | Windows XP tippek-trükkök | 22. rész |
| 3088 | Windows | Windows 2000/XP tippek, trükkök | 23. rész |
| 3133 | Windows | Windows XP tippcsokor | 24. rész |
| 3140 | Windows | Windows XP tippek, trükkök | 25. rész |
| 3152 | Windows | XP és IIS tippek - trükkök | 26. rész |
| 3158 | Windows | Windows XP tippek, trükkök | 27. rész |
| 3168 | Windows | Tippek, trükkök | 28. rész |
| 3170 | Windows | Registry trükkök | 29. rész |
| 3179 | Windows | Tippek, trükkök | 30. rész |
| 3197 | Windows | Windows XP tippek, trükkök | 31. rész |
| 3205 | Windows | Tippek, trükkök | 32. rész |
| 3214 | Windows | Tippek, trükkök | 33. rész |
| 3223 | Windows | Tippek, trükkök | 34. rész |
| 3233 | Windows | Tippek, trükkök | 35. rész |
| 3271 | Windows | Tippek, trükkök | 36. rész |
| 3307 | Windows | Tippek, trükkök | 37. rész |
| 3370 | Windows | Tippek, trükkök | 38. rész |
| 3399 | Windows | Tippek, trükkök | 39. rész |
| 3510 | Windows | Tippek, trükkök | 40. rész |
| 3611 | Windows | Hardverrel kapcsolatos tippek, trükkök | 41. rész |
| 3668 | Windows | Registry trükkök | 42. rész |
| 3711 | Windows | Tippek, trükkök | 43. rész |
| 3771 | Windows | Tippek, trükkök | 44. rész |
| 3801 | Windows | Tippek, trükkök | 45. rész |
| 3831 | Windows | Tippek, trükkök | 46. rész |
| 3891 | Windows | Tippek, trükkök | 47. rész |
| 3921 | Windows | Tippek, trükkök | 48. rész |
| 3981 | Windows | Tippek, trükkök | 49. rész |
| 4041 | Windows | Tippek, trükkök | 50. rész |
| 4071 | Windows | Tippek, trükkök | 51. rész |
| 4151 | Windows | Tippek, trükkök | 52. rész |
| 4171 | C# | Tippek, trükkök | 53. rész |
| 4211 | Windows | Tippek, trükkök | 54. rész |
| 4251 | Windows | Tippek, trükkök | 55. rész |
| 4281 | Windows | Tippek, trükkök | 56. rész |
| 3589 | Delphi | Tippek, trükkök | 57. rész |
| 3718 | Delphi | Tippek, trükkök | 58. rész |
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|