﻿{"id":15251,"date":"2018-09-24T09:21:24","date_gmt":"2018-09-24T09:21:24","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/?post_type=ht_kb&#038;p=15251"},"modified":"2018-12-14T13:59:54","modified_gmt":"2018-12-14T13:59:54","slug":"opt057-strojenie-wydajnosciowe-baz-ms-sql-dla-comarch-erp-optima","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/dokumentacja\/opt057-strojenie-wydajnosciowe-baz-ms-sql-dla-comarch-erp-optima\/","title":{"rendered":"OPT057 &#8211; Strojenie wydajno\u015bciowe baz MS SQL dla Comarch ERP Optima"},"content":{"rendered":"<p style=\"text-align: right;\">Data aktualizacji: 28-11-2018<\/p>\n<div class=\"su-list\" style=\"margin-left:0px\">\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-caret su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Spis tre\u015bci<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<h3><a href=\"#wpr\">Wprowadzenie<\/a><\/h3>\n<h3><a href=\"#pi\">Planowanie instalacji<\/a><\/h3>\n<ul>\n<li style=\"padding-left: 30px;\"><a href=\"#dksdsbd\">Dob\u00f3r konfiguracji sprz\u0119towej dla serwera bazy danych<\/a><\/li>\n<li style=\"padding-left: 30px;\"><a href=\"#essql\">Edycje serwera SQL<\/a><\/li>\n<\/ul>\n<h3><a href=\"#kf\">Konfiguracja serwera SQL<\/a><\/h3>\n<ul>\n<li style=\"padding-left: 30px;\"><a href=\"#mimiwpr\">Minimalna i Maksymalna ilo\u015b\u0107 wykorzystywanej pami\u0119ci RAM<\/a><\/li>\n<li style=\"padding-left: 30px;\"><a href=\"#ip\">Inne parametry<\/a><\/li>\n<\/ul>\n<h3><a href=\"#dpw\">Diagnoza problem\u00f3w wydajno\u015bciowych<\/a><\/h3>\n<h3><a href=\"#odbd\">Optymalizacja du\u017cych baz danych<\/a><\/h3>\n<ul>\n<li style=\"padding-left: 30px;\"><a href=\"#wbi\">Wyszukiwanie brakuj\u0105cych indeks\u00f3w<\/a><\/li>\n<li style=\"padding-left: 30px;\"><a href=\"#deta\">Database Engine Tuning Advisor<\/a><\/li>\n<\/ul>\n<h3><a href=\"#cca\">Cykliczne czynno\u015bci administracyjne<\/a><\/h3>\n<ul>\n<li style=\"padding-left: 30px;\"><a href=\"#mp\">Maintenance Plan \u2013 zautomatyzowane strojenie dla pe\u0142nych wersji MS SQL<\/a><\/li>\n<li style=\"padding-left: 30px;\"><a href=\"#psdbw\">Plan serwisowy dla bezp\u0142atnych wersji MS SQL<\/a><\/li>\n<\/ul>\n<h4><a href=\"#pliki\">Pliki do pobrania<\/a><br \/>\n<\/div><\/div>\n<\/div><\/h4>\n<p><a name=\"wpr\"><\/a><\/p>\n<h2><strong>Wprowadzenie<\/strong><\/h2>\n<p>Serwer bazy danych jest centralnym miejscem dla ca\u0142ej instalacji <strong>Comarch ERP Optima<\/strong> i ma bardzo du\u017ce znaczenie dla wydajnej jej pracy. Dlatego bardzo wa\u017cne jest odpowiednie skonfigurowanie serwera zar\u00f3wno pod wzgl\u0119dem sprz\u0119towym, doboru w\u0142a\u015bciwego oprogramowania oraz jego ustawie\u0144. Dodatkowo z biegiem czasu i dzia\u0142alno\u015bci\u0105 klienta sp\u0142ywaj\u0105 nowe dane s\u0142ownikowe oraz dokumenty, co powoduje przyrost bazy danych. Wa\u017cne jest wi\u0119c monitorowanie stanu serwera SQL i odpowiednie reagowanie w celu zapewnienia jak najlepszej wydajno\u015bci.<\/p>\n<p>Niniejszy biuletyn zawiera wytyczne dla konfiguracji serwera bazy danych dedykowanego do pracy z <strong>Comarch ERP Optima<\/strong>. Przedstawiono w nim r\u00f3wnie\u017c podstawowe metody diagnozy problem\u00f3w wydajno\u015bciowych oraz sposoby optymalizacji. W ostatnim rozdziale znajduje si\u0119 obszerny opis cyklicznych czynno\u015bci administracyjnych, kt\u00f3rych celem jest utrzymanie serwera SQL w dobrej kondycji. Do biuletynu do\u0142\u0105czone s\u0105 skrypty, kt\u00f3re pozwalaj\u0105 zautomatyzowa\u0107 cykliczne czynno\u015bci administracyjne dla wersji Express serwera SQL.<\/p>\n<p><a name=\"pi\"><\/a><\/p>\n<h2><strong>Planowanie instalacji<\/strong><\/h2>\n<p><a name=\"dksdsbd\"><\/a><\/p>\n<h3><strong>Dob\u00f3r konfiguracji sprz\u0119towej dla serwera bazy danych<\/strong><\/h3>\n<p>Serwer bazy danych jest wra\u017cliwym elementem, kt\u00f3rego awaria mo\u017ce spowodowa\u0107 przest\u00f3j ca\u0142ej firmy oraz du\u017ce straty finansowe, dlatego warto zainwestowa\u0107 w markowy, sprawdzony sprz\u0119t. Taki serwer w atrakcyjnych cenach mo\u017cna np. naby\u0107 w ramach <strong>Zintegrowanej Oferty Comarch<\/strong>.<\/p>\n<h4><strong>Konfiguracja sprz\u0119towa<\/strong><\/h4>\n<p>Przy doborze serwera bazy danych nale\u017cy zwr\u00f3ci\u0107 szczeg\u00f3ln\u0105 uwag\u0119 to, aby zapewnia\u0142 on niezawodn\u0105 prac\u0119 i bezpiecze\u0144stwo przechowywanych danych. Dlatego warto, aby jak najwi\u0119cej komponent\u00f3w by\u0142o nadmiarowych usuwaj\u0105c pojedyncze ogniwa awarii. Czyli dobrze jest zastosowa\u0107 podw\u00f3jne zasilacze oraz zasilanie awaryjne (UPS) pozwalaj\u0105ce na prawid\u0142owe zamkni\u0119cie systemu w momencie braku pr\u0105du.<br \/>\nJe\u017celi chodzi o wydajno\u015b\u0107 to przede wszystkim nale\u017cy zwr\u00f3ci\u0107 na ilo\u015b\u0107 pami\u0119ci RAM oraz szybko\u015b\u0107 podsystemu dyskowego. Procesor zwykle odgrywa mniejsze znaczenie. Jednak\u017ce powinien zawiera\u0107 rdzenie nowej generacji (Intel Nehalem lub lepszy) i taktowaniu przynajmniej 2 GHz.<br \/>\nIm wi\u0119cej dost\u0119pnej pami\u0119ci tym lepiej, oczywi\u015bcie ze wzgl\u0119du na koszty, jej ilo\u015b\u0107 musi by\u0107 dobrana do zapotrzebowania, bazuj\u0105c na wielko\u015bci instalacji, czyli ilo\u015bci u\u017cytkownik\u00f3w, wielko\u015bci baz danych oraz ich ilo\u015bci. Orientacyjne ilo\u015bci pami\u0119ci RAM dla r\u00f3\u017cnych konfiguracji zosta\u0142y podane w Podr\u0119czniku konfiguracji dla bie\u017c\u0105cej wersji Comarch ERP Optima. P\u00f3\u017aniej oczywi\u015bcie nale\u017cy obserwowa\u0107 liczniki serwera i sprawdza\u0107, czy nie ma potrzeby jej zwi\u0119kszenia. Informacje na temat przyk\u0142adowych licznik\u00f3w, na kt\u00f3re warto zwr\u00f3ci\u0107 uwag\u0119 podano w punkcie 4. Diagnoza problem\u00f3w wydajno\u015bciowych.<br \/>\nPodsystem dyskowy powinien by\u0107 zabezpieczony przed awariami poprzez odpowiedni\u0105 konfiguracj\u0119. Zalecana konfiguracja to przynajmniej Raid 1 (mirror) dla wolumenu obs\u0142uguj\u0105cego system oraz w miar\u0119 mo\u017cliwo\u015bci Raid 10 dla wolumenu przechowuj\u0105cego dane. Dodatkowo nale\u017cy zwr\u00f3ci\u0107 uwag\u0119, aby kontroler dyskowy posiada\u0142 podtrzymywanie bateryjne, kt\u00f3re umo\u017cliwia zastosowanie opcji write-back przyspieszaj\u0105cej dzia\u0142anie podsystemu dyskowego.<br \/>\nNajcz\u0119\u015bciej przyjmowan\u0105 jednostk\u0105 wydajno\u015bci podsystemu dyskowego jest IOPS<a href=\"http:\/\/pl.wikipedia.org\/wiki\/Operacja_wej\u015bcia_wyj\u015bcia_na_sekund\u0119\">[1]<\/a> (ang. Input\/Output Operations Per Second, IOPS), czyli ilo\u015b\u0107 operacji wej\u015bcia wyj\u015bcia na sekund\u0119. Jako operacj\u0119 wej\u015bcia\/ wyj\u015bcia rozumie si\u0119 odczyt lub zapis fragmentu danych, najcz\u0119\u015bciej o rozmiarze 4 kB.<\/p>\n<p>Poni\u017cej znajduj\u0105 si\u0119 orientacyjne dane dotycz\u0105ce wydajno\u015bci r\u00f3\u017cnych podsystem\u00f3w dyskowych:<\/p>\n\n<table id=\"tablepress-272\" class=\"tablepress tablepress-id-272\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Dysk<\/th><th class=\"column-2\">Orientacyjna warto\u015b\u0107 IOPS<a href=\"http:\/\/www.symantec.com\/connect\/articles\/getting-hang-iops-v13\">[2]<\/a><\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">Dysk Sata 5400<\/td><td class=\"column-2\">~50-80<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">Dysk Sata 7200 <\/td><td class=\"column-2\">~75-100<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">Dysk SAS 10k<\/td><td class=\"column-2\">~140<\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\">Dysk SAS 15k<\/td><td class=\"column-2\">~175-210<\/td>\n<\/tr>\n<tr class=\"row-6\">\n\t<td class=\"column-1\">Dysk SSD<\/td><td class=\"column-2\">~400-1000000<a href=\"http:\/\/en.wikipedia.org\/wiki\/IOPS\">[3]<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-272 from cache -->\n<p>Wymagania co do podsystemu dyskowego zale\u017c\u0105 od wielko\u015bci instalacji to znaczy wielko\u015bci bazy oraz ilo\u015bci r\u00f3wnoczesnych u\u017cytkownik\u00f3w.<\/p>\n<p>Jako zgrubn\u0105 zasad\u0119 mo\u017cna przyj\u0105\u0107, \u017ce dla mniejszych baz danych (&lt;2 GB) nale\u017cy zarezerwowa\u0107 oko\u0142o 15-25 IOPS dla u\u017cytkownika. Natomiast dla wi\u0119kszych baz (&gt; 2 GB) dla jednego u\u017cytkownika nale\u017cy przeznaczy\u0107 25-40 IOPS lub wi\u0119cej.<\/p>\n<p>Jak wida\u0107 Rozwi\u0105zaniem godnym polecenia jest zastosowanie dysk\u00f3w SSD. Przy czym nale\u017cy pami\u0119ta\u0107 o zabezpieczeniu ich przed awari\u0105 np. poprzez konfiguracj\u0119 RAID 1. Bardziej szczeg\u00f3\u0142owe informacje dotycz\u0105ce okre\u015blenia wymaga\u0144 aplikacji do podsystemu dyskowego mo\u017cna znale\u017a\u0107 w poni\u017cszym odno\u015bniku: <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ee410782(v=sql.100).aspx\">http:\/\/msdn.microsoft.com\/en-us\/library\/ee410782(v=sql.100).aspx<\/a><\/p>\n<p>Por\u00f3wnanie wydajno\u015bci pracy Comarch ERP Optima z dyskami SSD i SATA znajduje si\u0119 w biuletynie technicznym: OPT076 &#8211; Por\u00f3wnanie wydajno\u015bci HDD vs SSD w Comarch ERP Optima.pdf, kt\u00f3ry jest dost\u0119pny na Indywidualnych Stronach Partner\u00f3w (<a href=\"https:\/\/www.erp.comarch.pl\/\/partnerzy\/default.aspx\">https:\/\/www.erp.comarch.pl\/\/partnerzy\/default.aspx<\/a>).<\/p>\n<h4><strong>Biura rachunkowe:<\/strong><\/h4>\n<p>Kilka mniejszych baz danych s\u0142abiej obci\u0105\u017ca serwer ni\u017c jedna du\u017ca. Dlatego przy skalowaniu serwera SQL dla biura rachunkowego nale\u017cy przede wszystkim sprawdzi\u0107 jaka b\u0119dzie wielko\u015b\u0107 najwi\u0119kszej bazy danych i pod ni\u0105 dobiera\u0107 konfiguracj\u0119 plus zabezpieczy\u0107 dodatkow\u0105 ilo\u015b\u0107 pami\u0119ci RAM wsp\u00f3\u0142miernie do ilo\u015bci baz danych. Raczej nie nale\u017cy przekracza\u0107 ilo\u015bci 50 baz danych o wielko\u015bci do 200 MB na rdze\u0144 procesora.<br \/>\n<a name=\"essql\"><\/a><\/p>\n<h3><strong>Edycje serwera SQL<\/strong><\/h3>\n<p>Bardzo du\u017ce znaczenie dla wydajnej pracy serwera SQL jest w\u0142a\u015bciwe dobranie edycji serwera SQL. <strong>Comarch ERP Optima<\/strong> jest dystrybuowana z darmow\u0105 serwera SQL o nazwie Express. Edycja ta posiada okre\u015blone ograniczenia co do mo\u017cliwo\u015bci wykorzystania zasob\u00f3w komputera, na kt\u00f3rym jest zainstalowana. Szczeg\u00f3\u0142y znajduj\u0105 si\u0119 w poni\u017cszej tabeli.<\/p>\n\n<table id=\"tablepress-274\" class=\"tablepress tablepress-id-274\" aria-describedby=\"tablepress-274-description\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Edycja<\/th><th class=\"column-2\">Maksymalna ilo\u015b\u0107 pami\u0119ci RAM (dla puli bufor\u00f3w)<\/th><th class=\"column-3\">Maksymalna wielko\u015b\u0107 bazy danych<\/th><th class=\"column-4\">Ilo\u015b\u0107 obs\u0142ugiwanych procesor\u00f3w<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">SQL 2008 Express<\/td><td class=\"column-2\">1 GB*<\/td><td class=\"column-3\">4 GB<\/td><td class=\"column-4\">1<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">SQL 2008 R2 Express<\/td><td class=\"column-2\">1 GB*<\/td><td class=\"column-3\">10 GB<\/td><td class=\"column-4\">1<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">SQL 2012 \/ 2014 Express<\/td><td class=\"column-2\">1 GB*<\/td><td class=\"column-3\">10 GB<\/td><td class=\"column-4\">1 (maksymalnie 4 rdzenie)<\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\">SQL 2008 R2 Workgroup<\/td><td class=\"column-2\">3 GB<\/td><td class=\"column-3\">Bez ogranicze\u0144 (524 PB)<\/td><td class=\"column-4\">2<\/td>\n<\/tr>\n<tr class=\"row-6\">\n\t<td class=\"column-1\">SQL 2008 R2 Standard<\/td><td class=\"column-2\">64 GB<\/td><td class=\"column-3\">Bez ogranicze\u0144 (524 PB)<\/td><td class=\"column-4\">4<\/td>\n<\/tr>\n<tr class=\"row-7\">\n\t<td class=\"column-1\">SQL 2012 Standard \/ BI<\/td><td class=\"column-2\">64 GB<\/td><td class=\"column-3\">Bez ogranicze\u0144 (524 PB)<\/td><td class=\"column-4\">4 procesory (do 16 rdzeni)<\/td>\n<\/tr>\n<tr class=\"row-8\">\n\t<td class=\"column-1\">SQL 2014 Standard \/ BI<\/td><td class=\"column-2\">128 GB<\/td><td class=\"column-3\">Bez ogranicze\u0144 (524 PB)<\/td><td class=\"column-4\">4 procesory (do 16 rdzeni)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<span id=\"tablepress-274-description\" class=\"tablepress-table-description tablepress-table-description-id-274\"><\/span>\n<!-- #tablepress-274 from cache -->\n\u0179r\u00f3d\u0142o: <a href=\"http:\/\/www.microsoft.com\/sqlserver\/en\/us\/product-info\/compare.aspx\">http:\/\/www.microsoft.com\/sqlserver\/en\/us\/product-info\/compare.aspx<\/a><br \/>\n*Badania niezale\u017cne od Producenta pokazuj\u0105, \u017ce wersja Express mo\u017ce wykorzysta\u0107 maksymalnie 1,4 GB RAM (<a href=\"http:\/\/sqlgeek.pl\/2010\/08\/23\/pl-sql-server-limity-w-sql-server-2008-r2-express-edition\/\">http:\/\/sqlgeek.pl\/2010\/08\/23\/pl-sql-server-limity-w-sql-server-2008-r2-express-edition\/<\/a>)<\/p>\n<h4><strong>Architektura 32 bit, a 64 bit.<\/strong><\/h4>\n<p>Obecnie obowi\u0105zuj\u0105c\u0105 architektur\u0105 jest architektura 64 bitowa i w miar\u0119 mo\u017cliwo\u015bci zalecana jest aktualizacja do niej \u015brodowisk 32 bitowych, kt\u00f3re posiadaj\u0105 ograniczenia zwi\u0105zane z ilo\u015bci\u0105 adresowanej pami\u0119ci, a tak\u017ce r\u00f3\u017cnymi komplikacjami w jej alokacji. W podstawowej konfiguracji proces 32 bitowy mo\u017ce maksymalnie zaadresowa\u0107 2 GB pami\u0119ci, przy zastosowaniu specjalnego prze\u0142\u0105cznika mo\u017cna t\u0105 warto\u015b\u0107 zwi\u0119kszy\u0107 do 3 GB, ale dzieje si\u0119 to kosztem ilo\u015bci dost\u0119pnej przestrzeni adresowej dla systemu operacyjnego dlatego nale\u017cy robi\u0107 to ostro\u017cnie. Serwer SQL mo\u017ce dodatkowo wykorzysta\u0107 mechanizm AWE, kt\u00f3ry pozwala na systemach 32 bitowych wyj\u015b\u0107 poza zakres 4 GB pami\u0119ci. Szczeg\u00f3\u0142y mo\u017cna znale\u017a\u0107 w archiwalnym biuletynie technicznym OPT041-Wydajno\u015b\u0107 Comarch OPT!MA a procesory wielordzeniowe i 64 bitowe, kt\u00f3ry jest dost\u0119pny na stronach walidowanych.<br \/>\nNa systemach 64 bitowych warto zwr\u00f3ci\u0107 uwag\u0119, aby instalowa\u0107 r\u00f3wnie\u017c serwer SQL w wersji 64 bitowej poniewa\u017c jego 32 bitowy odpowiednik b\u0119dzie w stanie wykorzysta\u0107 jedynie 4 GB z dost\u0119pnej pami\u0119ci nawet w edycji Standard.<br \/>\nWi\u0119cej informacji na temat mo\u017cliwo\u015bci wykorzystania pami\u0119ci operacyjnej przez poszczeg\u00f3lne wersje system\u00f3w operacyjnych Windows mo\u017cna znale\u017a\u0107 tutaj:<br \/>\n<a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/aa366778(v=vs.85).aspx\">http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/aa366778(v=vs.85).aspx<\/a><\/p>\n<p><a name=\"kf\"><\/a><\/p>\n<h2><strong>Konfiguracja serwera SQL<\/strong><\/h2>\n<p>Wi\u0119kszo\u015b\u0107 parametr\u00f3w serwera SQL nale\u017cy pozostawi\u0107 bez zmian, poniewa\u017c domy\u015blne warto\u015bci s\u0105 optymalne dla wi\u0119kszo\u015bci warunk\u00f3w pracy. Sugerujemy jednak\u017ce zwr\u00f3ci\u0107 uwag\u0119 na<br \/>\nMaksymaln\u0105 \/ Minimalna ilo\u015b\u0107 wykorzystywanej pami\u0119ci RAM.<\/p>\n<p><a name=\"mimiwpr\"><\/a><\/p>\n<h3><strong>Minimalna i Maksymalna ilo\u015b\u0107 wykorzystywanej pami\u0119ci RAM&gt;<\/strong><\/h3>\n<p>Parametr minimalnej i maksymalnej ilo\u015bci wykorzystanej pami\u0119ci RAM odnosi si\u0119 wy\u0142\u0105cznie do jednego z komponent\u00f3w serwera SQL, czyli puli bufor\u00f3w. Jest to kluczowy element jednak\u017ce, przy rezerwowaniu pami\u0119ci dla puli bufor\u00f3w nale\u017cy wzi\u0105\u0107 pod uwag\u0119 r\u00f3wnie\u017c inne sk\u0142adniki samego serwera SQL jak i samego systemu operacyjnego.<\/p>\n<h4><strong>Minimum Server Memory<\/strong><\/h4>\n<p>Domy\u015bln\u0105 warto\u015bci\u0105 parametru Minimum Server Memory jest zero, co oznacza, \u017ce serwer b\u0119dzie dynamicznie zarz\u0105dza\u0142 dost\u0119pn\u0105 pami\u0119ci\u0105 RAM dla puli bufor\u00f3w. Ustawienie tego parametru powy\u017cej zera oznacza, \u017ce serwer SQL nie b\u0119dzie m\u00f3g\u0142 zwolni\u0107 tej pami\u0119ci w razie potrzeby. Z drugiej strony w \u015brodowisku, gdzie pracuje wi\u0119cej aplikacji pr\u00f3cz samego serwera SQL mo\u017ce by\u0107 konieczne zarezerwowanie niezb\u0119dnego minimum pami\u0119ci, poniewa\u017c niemo\u017cno\u015b\u0107 zaalokowania niezb\u0119dnego minimum spowoduje konieczno\u015b\u0107 korzystania z pliku wymiany na dysku twardym i znaczn\u0105 degradacj\u0119 wydajno\u015bci Serwera SQL. Na komputerach dedykowanych do pracy tylko z serwerem SQL zaleca si\u0119 pozostawienie domy\u015blnej warto\u015bci tego parametru.<\/p>\n<h4><strong>Maximum Server Memory<\/strong><\/h4>\n<p>Domy\u015blna warto\u015bci\u0105 tego parametru to: 2147483647 MB, co oznacza \u017ce Server SQL b\u0119dzie chcia\u0142 zaj\u0105\u0107 ca\u0142\u0105 dost\u0119pn\u0105 pami\u0119\u0107 na komputerze. Mo\u017ce to niestety prowadzi\u0107 do spadku wydajno\u015bci ca\u0142ego \u015brodowiska poprzez to, \u017ce pula bufor\u00f3w zajmie pami\u0119\u0107 potrzebn\u0105 do dzia\u0142ania systemu operacyjnego lub innych komponent\u00f3w serwera SQL. Dlatego zaleca si\u0119 ograniczenie tej pami\u0119ci rezerwuj\u0105c niezb\u0119dn\u0105 przestrze\u0144 do dzia\u0142ania systemu operacyjnego i pozosta\u0142ych element\u00f3w serwera SQL (oraz ewentualnie dla dodatkowych aplikacji pracuj\u0105cych na tym systemie).<\/p>\n<figure id=\"attachment_13683\" aria-describedby=\"caption-attachment-13683\" style=\"width: 704px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15334\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/serverproperties.png\" alt=\"\" width=\"704\" height=\"632\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/serverproperties.png 704w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/serverproperties-300x269.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/serverproperties-50x45.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/serverproperties-600x539.png 600w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/serverproperties-320x287.png 320w\" sizes=\"auto, (max-width: 704px) 100vw, 704px\" \/><figcaption id=\"caption-attachment-13683\" class=\"wp-caption-text\">Ustawienia pami\u0119ci dla instancji Microsoft SQL Server<\/figcaption><\/figure>\n<p>Poni\u017cej znajduj\u0105 si\u0119 sugestie ustawie\u0144 parametru Maximum Server Memory (przy za\u0142o\u017ceniu, \u017ce na serwerze nie pracuj\u0105 dodatkowe aplikacje oraz inne modu\u0142y serwera SQL takie jak wyszukiwanie pe\u0142notekstowe, analizy czy raporty). Dane te oczywi\u015bcie dotycz\u0105 wersji, kt\u00f3re nie posiadaj\u0105 wbudowanych ogranicze\u0144 tak jak wersja Express. Dla wersji Express bior\u0105c pod uwag\u0119 wcze\u015bniej podane informacje mo\u017cna ustawi\u0107 Maximum Server Memory na 1400 MB.<\/p>\n\n<table id=\"tablepress-275\" class=\"tablepress tablepress-id-275\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Pami\u0119\u0107 fizyczna<\/th><th class=\"column-2\">Maximum Server Memory<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">2 GB<\/td><td class=\"column-2\">1500 MB<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">4 GB<\/td><td class=\"column-2\">3200 MB<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">6 GB<\/td><td class=\"column-2\">4800 MB<\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\">8 GB<\/td><td class=\"column-2\">6400 MB<\/td>\n<\/tr>\n<tr class=\"row-6\">\n\t<td class=\"column-1\">12 GB<\/td><td class=\"column-2\">10000 MB<\/td>\n<\/tr>\n<tr class=\"row-7\">\n\t<td class=\"column-1\">16 GB<\/td><td class=\"column-2\">13500 MB<\/td>\n<\/tr>\n<tr class=\"row-8\">\n\t<td class=\"column-1\">24 GB<\/td><td class=\"column-2\">21500 MB<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-275 from cache -->\n<p>\u0179r\u00f3d\u0142o: <a href=\"http:\/\/www.sqlservercentral.com\/blogs\/glennberry\/2009\/10\/29\/suggested-max-memory-settings-for-sql-server-2005_2F00_2008\/\">http:\/\/www.sqlservercentral.com\/blogs\/glennberry\/2009\/10\/29\/suggested-max-memory-settings-for-sql-server-2005_2F00_2008\/<\/a><\/p>\n<p><a name=\"ip\"><\/a><\/p>\n<h3><strong>Inne parametry<\/strong><\/h3>\n<h4><strong>Optimize for Ad hoc Workloads<\/strong><\/h4>\n<p>W\u0142\u0105czenie parametru \u201eOptimize for Ad hoc Workloads\u201d pozwala na lepsze wykorzystanie dost\u0119pnej pami\u0119ci RAM w sytuacji, gdy na serwerze generowane jest wiele zapyta\u0144, kt\u00f3re nigdy wi\u0119cej lub bardzo rzadko s\u0105 uruchamiane ponownie. Parametr ten powoduje, \u017ce plany dla zapyta\u0144 \u201ead hoc\u201d nie s\u0105 zapisywane w pami\u0119ci podr\u0119cznej do p\u00f3\u017aniejszego wykorzystania. Zapisywany jest tylko ich ma\u0142y fragment, ca\u0142y plan jest zapisywany dopiero przy powt\u00f3rnym wykonaniu tego samego zapytania. W ten spos\u00f3b oszcz\u0119dzana jest pami\u0119\u0107 RAM, przez co mo\u017ce by\u0107 ona wykorzystana przez serwer SQL do innych cel\u00f3w, a co za tym idzie zwi\u0119ksza si\u0119 jego wydajno\u015b\u0107.<\/p>\n<figure id=\"attachment_13683-2\" aria-describedby=\"caption-attachment-13683-2\" style=\"width: 703px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15340\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/serverproperties2.png\" alt=\"\" width=\"703\" height=\"630\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/serverproperties2.png 703w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/serverproperties2-300x269.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/serverproperties2-50x45.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/serverproperties2-600x538.png 600w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/serverproperties2-320x287.png 320w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><figcaption id=\"caption-attachment-13683-2\" class=\"wp-caption-text\">Zaawansowane w\u0142a\u015bciwo\u015bci serwera SQL \u2013 w\u0142\u0105czony parametr Optimize for Ad hoc Workloads<\/figcaption><\/figure>\n<p>Zaleca si\u0119 w\u0142\u0105czenie tego parametru przy pracy z Comarch ERP Optima. Opcja ta jest dost\u0119pna od wersji SQL 2008.<\/p>\n<p>Zaj\u0119to\u015b\u0107 pami\u0119ci plan\u00f3w dla zapyta\u0144 mo\u017cna sprawdzi\u0107 poni\u017cszym zapytaniem:<\/p>\n<p><code><strong>select<\/strong> objtype,<br \/>\ncount(*) as number_of_plans,<br \/>\nsum(cast(size_in_bytes as bigint))\/1024\/1024 as size_in_MBs,<br \/>\navg(usecounts) as avg_use_count<br \/>\nfrom sys.dm_exec_cached_plans<br \/>\ngroup by objtype<\/code><\/p>\n<p>Poni\u017cszy wynik wskazuje, \u017ce plany typu \u201eAdhoc\u201d zajmuj\u0105 1439 MB pami\u0119ci, co jest stosunkowo du\u017c\u0105 warto\u015bci\u0105 wi\u0119c warto w\u0142\u0105czy\u0107 opcj\u0119 \u201eOptimize for ad hoc workloads\u201d.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15344\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/adhoc.png\" alt=\"\" width=\"594\" height=\"230\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/adhoc.png 594w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/adhoc-300x116.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/adhoc-50x19.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/adhoc-320x124.png 320w\" sizes=\"auto, (max-width: 594px) 100vw, 594px\" \/><\/p>\n<p>Za pomoc\u0105 komendy:<\/p>\n<p><code><strong>DBCC FREESYSTEMCACHE('SQL Plans')<\/strong><\/code><\/p>\n<p>mo\u017cna wyczy\u015bci\u0107 pami\u0119\u0107 podr\u0119czn\u0105 plan\u00f3w dla plan\u00f3w typu Adhoc.<\/p>\n<p><a name=\"dpw\"><\/a><\/p>\n<h2><strong>Diagnoza problem\u00f3w wydajno\u015bciowych<\/strong><\/h2>\n<p>Temat diagnozy wydajno\u015bci serwera SQL jest bardzo obszerny, jednak\u017ce poni\u017cej wybrano kilka podstawowych wska\u017anik\u00f3w, kt\u00f3re warto sprawdzi\u0107, gdy wyst\u0119puj\u0105 problemy wydajno\u015bciowe.<br \/>\nWszystkie poni\u017csze wska\u017aniki dost\u0119pne s\u0105 z poziomu systemu operacyjnego.<br \/>\nNarz\u0119dzia administracyjne \\ Monitor wydajno\u015bci<\/p>\n\n<table id=\"tablepress-276\" class=\"tablepress tablepress-id-276\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Nazwa parametru<\/th><th class=\"column-2\">Zalecane warto\u015bci<\/th><th class=\"column-3\">Zalecane dzia\u0142ania<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">Procesor: Czas procesora [%]<\/td><td class=\"column-2\">< 80%<\/td><td class=\"column-3\">Je\u017celi warto\u015b\u0107 tego parametru przynajmniej kilka razy dziennie na d\u0142u\u017cszy czas przekracza zalecan\u0105 warto\u015b\u0107 nale\u017cy zaplanowa\u0107 do\u0142o\u017cenie drugiego procesora lub jego wymian\u0119 na wydajniejszy<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">System: Processor Queue Lenght<\/td><td class=\"column-2\">< 2 (dla rdzenia)<\/td><td class=\"column-3\">Je\u017celi warto\u015b\u0107 tego parametru przynajmniej kilka razy dziennie na d\u0142u\u017cszy czas przekracza zalecan\u0105 warto\u015b\u0107 nale\u017cy zaplanowa\u0107 do\u0142o\u017cenie drugiego procesora lub jego wymian\u0119 na wydajniejszy<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">Pami\u0119\u0107: Strony\/s<\/td><td class=\"column-2\">< 20<\/td><td class=\"column-3\">Zbyt ma\u0142a ilo\u015b\u0107 dost\u0119pnej pami\u0119ci RAM<\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\">Pami\u0119\u0107: Dost\u0119pne bajty<\/td><td class=\"column-2\">> 300<\/td><td class=\"column-3\">Zbyt ma\u0142a ilo\u015b\u0107 dost\u0119pnej pami\u0119ci RAM<\/td>\n<\/tr>\n<tr class=\"row-6\">\n\t<td class=\"column-1\">Dysk fizyczny: Czas dysku [%] (poddzielone przez ilo\u015b\u0107 dysk\u00f3w)<\/td><td class=\"column-2\">< 55%<\/td><td class=\"column-3\">Wysoka warto\u015b\u0107 tego parametru mo\u017ce wskazywa\u0107 na nie wystarczaj\u0105co szybki podsystem dyskowy lub zbyt ma\u0142\u0105 ilo\u015b\u0107 dost\u0119pnej pami\u0119ci RAM.<\/td>\n<\/tr>\n<tr class=\"row-7\">\n\t<td class=\"column-1\">Dysk fizyczny: \u015arednia d\u0142ugo\u015b\u0107 kolejki dysku (podzielone przez ilo\u015b\u0107 dysk\u00f3w)<\/td><td class=\"column-2\">< 2<\/td><td class=\"column-3\">Wysoka warto\u015b\u0107 tego parametru mo\u017ce wskazywa\u0107 na nie wystarczaj\u0105co szybki podsystem dyskowy lub zbyt ma\u0142\u0105 ilo\u015b\u0107 dost\u0119pnej pami\u0119ci RAM.<\/td>\n<\/tr>\n<tr class=\"row-8\">\n\t<td class=\"column-1\"><\/td><td class=\"column-2\">(najlepiej w\u00a0okolicach zera)<\/td><td class=\"column-3\"><\/td>\n<\/tr>\n<tr class=\"row-9\">\n\t<td class=\"column-1\">SQL Server Buffer: Buffer Cache Hit Ratio<\/td><td class=\"column-2\">> 90%<\/td><td class=\"column-3\">Zbyt ma\u0142a ilo\u015b\u0107 dost\u0119pnej pami\u0119ci RAM dla serwera SQL<\/td>\n<\/tr>\n<tr class=\"row-10\">\n\t<td class=\"column-1\"><\/td><td class=\"column-2\">(najlepiej w\u00a0granicach 99%)<\/td><td class=\"column-3\"><\/td>\n<\/tr>\n<tr class=\"row-11\">\n\t<td class=\"column-1\">Page life expectancy<\/td><td class=\"column-2\">> 300<\/td><td class=\"column-3\">Zbyt ma\u0142a ilo\u015b\u0107 dost\u0119pnej pami\u0119ci RAM dla serwera SQL<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-276 from cache -->\n<p>Zbyt ma\u0142a ilo\u015b\u0107 dost\u0119pnej pami\u0119ci dla serwera SQL mo\u017ce wynika\u0107 z poni\u017cszych czynnik\u00f3w:<br \/>\n<div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Za ma\u0142o pami\u0119ci w serwerze<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Ograniczenia wersji Express<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Nieprawid\u0142owo skonfigurowany parametr Max Server Memory<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Ograniczenia architektury 32 bitowej<\/li>\n<\/ul>\n<\/div>\n<p>Importy du\u017cych dokument\u00f3w poprzez prac\u0119 rozproszon\u0105 lub inne mechanizmy mog\u0105 na d\u0142u\u017cszy czas blokowa\u0107 dost\u0119p do tabel, a przez co powodowa\u0107 wyd\u0142u\u017cenie czasu operacji dla pozosta\u0142ych u\u017cytkownik\u00f3w. Dlatego zaleca si\u0119, aby szczeg\u00f3lnie du\u017ce importy by\u0142y wykonywane poza godzinami pracy innych u\u017cytkownik\u00f3w.<br \/>\nJe\u017celi jaki\u015b scenariusz dzia\u0142ania okazuje si\u0119 szczeg\u00f3lnie wolny prosimy o opisanie go krok po kroku i zg\u0142oszenie go przez System Obs\u0142ugi Zg\u0142osze\u0144 (SOZ).<\/p>\n<p><a name=\"odbd\"><\/a><\/p>\n<h2><strong>Optymalizacja du\u017cych baz danych<\/strong><\/h2>\n<p>Program jest dostosowany do pracy w wi\u0119kszo\u015bci warunk\u00f3w, jednak\u017ce niekt\u00f3re szczeg\u00f3lnie du\u017ce bazy ze wzgl\u0119du na specyficzny rozk\u0142ad danych w tabelach mog\u0105 wymaga\u0107 dodatkowej optymalizacji. Za du\u017ce bazy danych uwa\u017camy te, kt\u00f3re maj\u0105 rozmiar rz\u0119du kilku gigabajt\u00f3w lub wi\u0119cej. Przed przyst\u0105pieniem do poni\u017cszych czynno\u015bci dobrze upewni\u0107 si\u0119, czy serwer jest prawid\u0142owo skonfigurowany i posiada odpowiedni\u0105 ilo\u015b\u0107 zasob\u00f3w.<\/p>\n<p><a name=\"wbi\"><\/a><\/p>\n<h3><strong>Wyszukiwanie brakuj\u0105cych indeks\u00f3w<\/strong><\/h3>\n<p>Microsoft SQL Server posiada wbudowane mechanizmy, kt\u00f3re pozwalaj\u0105 okre\u015bli\u0107 orientacyjnie jakich indeks\u00f3w mo\u017ce brakowa\u0107. W tym celu mo\u017cna uruchomi\u0107 na serwerze nast\u0119puj\u0105ce zapytanie:<\/p>\n<p><code>select d.*<br \/>\n, s.avg_total_user_cost<br \/>\n, s.avg_user_impact<br \/>\n, s.last_user_seek<br \/>\n,s.unique_compiles<br \/>\nfrom sys.dm_db_missing_index_group_stats s<br \/>\n,sys.dm_db_missing_index_groups g<br \/>\n,sys.dm_db_missing_index_details d<br \/>\nwhere s.group_handle = g.index_group_handle<br \/>\nand d.index_handle = g.index_handle<br \/>\norder by s.avg_user_impact desc<br \/>\ngo<\/code><\/p>\n<p>\u0179rod\u0142o: <a href=\"http:\/\/www.google.pl\/url?sa=t&amp;rct=j&amp;q=performance_tuning_waits_queues.doc&amp;source=web&amp;cd=1&amp;ved=0CFkQFjAA&amp;url=http%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F4%2F7%2Fa%2F47a548b9-249e-484c-abd7-29f31282b04d%2FPerformance_Tuning_Waits_Queues.doc&amp;ei=IrjYT__PAcXk4QSOxJzRAw&amp;usg=AFQjCNFRIebSlMLnry8gH99CQklhdmokJw\">http:\/\/www.google.pl\/url?sa=t&amp;rct=j&amp;q=performance_tuning_waits_queues.doc&amp;source=web&amp;cd=1&amp;ved=0CFkQFjAA&amp;url=http%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F4%2F7%2Fa%2F47a548b9-249e-484c-abd7-29f31282b04d%2FPerformance_Tuning_Waits_Queues.doc&amp;ei=IrjYT__PAcXk4QSOxJzRAw&amp;usg=AFQjCNFRIebSlMLnry8gH99CQklhdmokJw<\/a><\/p>\n<p>Zapytanie to najlepiej uruchomi\u0107 po d\u0142u\u017cszej pracy u\u017cytkownik\u00f3w wykonuj\u0105cych swoje zadania z Comarch ERP Optima w szczeg\u00f3lno\u015bci w obszarach, gdzie zauwa\u017caj\u0105 problemy wydajno\u015bciowe. Nale\u017cy pami\u0119ta\u0107, \u017ce dane o brakuj\u0105cych indeksach s\u0105 usuwane po restarcie serwera SQL.<br \/>\nPrzyk\u0142adowy wynik powy\u017cszego zapytania (pomini\u0119to kilka kolumn, aby zachowa\u0107 czytelno\u015b\u0107).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15354\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/zapytanie.png\" alt=\"\" width=\"1284\" height=\"202\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/zapytanie.png 1284w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/zapytanie-300x47.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/zapytanie-768x121.png 768w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/zapytanie-1024x161.png 1024w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/zapytanie-50x8.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/zapytanie-920x145.png 920w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/zapytanie-600x94.png 600w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/zapytanie-320x50.png 320w\" sizes=\"auto, (max-width: 1284px) 100vw, 1284px\" \/><\/p>\n<p>Po pierwsze patrzymy na kolumny avg_user_impact oraz avg_total_user_cost, podaj\u0105 one zysk jaki mo\u017cna uzyska\u0107 przy zastosowaniu danego indeksu. Pierwszy z nich avg_user_impact wskazuje na procentow\u0105 popraw\u0119 w zmniejszeniu kosztu wykonania zapyta\u0144 u\u017cytkownika . Drugi natomiast avg_total_user_cost podaje ca\u0142kowity zysk w koszcie wykonywanych przez u\u017cytkownika zapyta\u0144.<br \/>\nNale\u017cy mie\u0107 r\u00f3wnie\u017c \u015bwiadomo\u015b\u0107, \u017ce podej\u015bcie to ma r\u00f3wnie\u017c swoje ograniczenia. Najbardziej istotne z nich jest takie, \u017ce podane dane nale\u017cy traktowa\u0107 jako sugesti\u0119, a nie jako konieczno\u015b\u0107. Pozosta\u0142e ograniczenia podane s\u0105 tutaj: <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ms345485(v=sql.105).aspx\">http:\/\/msdn.microsoft.com\/en-us\/library\/ms345485(v=sql.105).aspx<\/a><\/p>\n<p>Poni\u017cej znajduje si\u0119 skrypt u\u017cywany przez Dzia\u0142 Wsparcia Microsoft:<br \/>\n(<a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ms345421.aspx\">http:\/\/msdn.microsoft.com\/en-us\/library\/ms345421.aspx<\/a>)<\/p>\n<p><code>PRINT 'Missing Indexes: '<br \/>\nPRINT 'The \"improvement_measure\" column is an indicator of the (estimated) improvement that might '<br \/>\nPRINT 'be seen if the index was created. This is a unitless number, and has meaning only relative '<br \/>\nPRINT 'the same number for other indexes. The measure is a combination of the avg_total_user_cost, '<br \/>\nPRINT 'avg_user_impact, user_seeks, and user_scans columns in sys.dm_db_missing_index_group_stats.'<br \/>\nPRINT ''<br \/>\nPRINT '-- Missing Indexes --'<br \/>\nSELECT CONVERT (varchar, getdate(), 126) AS runtime,<br \/>\nmig.index_group_handle, mid.index_handle,<br \/>\nCONVERT (decimal (28,1), migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans)) AS improvement_measure,<br \/>\n'CREATE INDEX missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + CONVERT (varchar, mid.index_handle)<br \/>\n+ ' ON ' + mid.statement<br \/>\n+ ' (' + ISNULL (mid.equality_columns,'')<br \/>\n+ CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END + ISNULL (mid.inequality_columns, '')<br \/>\n+ ')'<br \/>\n+ ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,<br \/>\nmigs.*, mid.database_id, mid.[object_id]\nFROM sys.dm_db_missing_index_groups mig<br \/>\nINNER JOIN sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle<br \/>\nINNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle<br \/>\nWHERE CONVERT (decimal (28,1), migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans)) &gt; 10<br \/>\nORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC<br \/>\nPRINT ''<br \/>\nGO<\/code><\/p>\n<p>Przygotowuje on od razu definicj\u0119 indeksu wraz z przyk\u0142adow\u0105 nazw\u0105 sortuj\u0105c indeksy po polu \u201emiara poprawy\u201d, kt\u00f3re jest wyliczane bior\u0105c pod uwag\u0119 wspomniane wcze\u015bniej kolumny: avg_total_user_cost, avg_user_impact, oraz dodatkowo user_seeks i user_scans z sys.dm_db_missing_index_group_stats.<\/p>\n<section class=\"msp-alert-box msp-alert-warning\"><div class=\"msp-alert-icon\"><svg width=\"16\" height=\"16\" class=\"kb-icon kb-icon--warn\" aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\r\n    <g id=\"[AP]-Iconography\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g id=\"Iconography_sortowanie-po-kategorii\" transform=\"translate(-552.000000, -10695.000000)\" fill=\"currentColor\">\r\n            <g id=\"Group-8\" transform=\"translate(286.000000, 548.000000)\">\r\n                <g id=\"Iconography-Card-\" transform=\"translate(218.000000, 10107.000000)\">\r\n                    <g id=\"0-Icons\/-24-\/-Status-\/-Alert-\/-Outline\" transform=\"translate(48.000000, 40.000000)\">\r\n                        <path d=\"M16.0008333,3.91866667 C16.3568333,3.91866667 16.6875,4.10933333 16.8661667,4.41866667 L29.6608333,26.5813333 C29.8408333,26.8906667 29.8408333,27.272 29.6608333,27.5813333 C29.4821667,27.8906667 29.1528333,28.0813333 28.7955,28.0813333 L3.2035,28.0813333 C2.8475,28.0813333 2.51683333,27.8906667 2.33816667,27.5813333 C2.1595,27.272 2.1595,26.8906667 2.33816667,26.5813333 L15.1328333,4.41866667 C15.3128333,4.10933333 15.6421667,3.91866667 16.0008333,3.91866667 Z M16.0008333,6.91866667 L4.93683333,26.0813333 L27.0635,26.0813333 L16.0008333,6.91866667 Z M15.9993667,21.9445333 C16.7353667,21.9445333 17.3327,22.5418667 17.3327,23.2778667 C17.3327,24.0138667 16.7353667,24.6112 15.9993667,24.6112 C15.2647,24.6112 14.6660333,24.0138667 14.6660333,23.2778667 C14.6660333,22.5418667 15.2647,21.9445333 15.9993667,21.9445333 Z M15.9997667,11.762 C16.7344333,11.762 17.3171,12.3833333 17.2704333,13.118 L16.9464333,19.0366667 C16.9161303,19.4984848 16.566268,19.8666391 16.1212392,19.9297596 L15.9851,19.9393333 C15.4744333,19.9393333 15.0544333,19.542 15.0224333,19.0326667 L14.7291,13.1113333 C14.6851,12.3793333 15.2664333,11.762 15.9997667,11.762 Z\" id=\"Color\"><\/path>\r\n                    <\/g>\r\n                <\/g>\r\n            <\/g>\r\n        <\/g>\r\n    <\/g>\r\n<\/svg><\/div><div class=\"msp-alert-body\"><div class=\"msp-alert-title\">Uwaga<\/div><div class=\"msp-alert-content\"><p>Nale\u017cy przygotowa\u0107 skrypt dodaj\u0105cy oraz usuwaj\u0105cy dodawane indeksy, poniewa\u017c dodatkowe indeksy uniemo\u017cliwi\u0105 wykonanie konwersji do nowej wersji programu. Po skonwertowaniu bazy mo\u017cna na nowo doda\u0107 przygotowane indeksy<\/div><\/div><\/section>\n<section class=\"msp-alert-box msp-alert-warning\"><div class=\"msp-alert-icon\"><svg width=\"16\" height=\"16\" class=\"kb-icon kb-icon--warn\" aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\r\n    <g id=\"[AP]-Iconography\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g id=\"Iconography_sortowanie-po-kategorii\" transform=\"translate(-552.000000, -10695.000000)\" fill=\"currentColor\">\r\n            <g id=\"Group-8\" transform=\"translate(286.000000, 548.000000)\">\r\n                <g id=\"Iconography-Card-\" transform=\"translate(218.000000, 10107.000000)\">\r\n                    <g id=\"0-Icons\/-24-\/-Status-\/-Alert-\/-Outline\" transform=\"translate(48.000000, 40.000000)\">\r\n                        <path d=\"M16.0008333,3.91866667 C16.3568333,3.91866667 16.6875,4.10933333 16.8661667,4.41866667 L29.6608333,26.5813333 C29.8408333,26.8906667 29.8408333,27.272 29.6608333,27.5813333 C29.4821667,27.8906667 29.1528333,28.0813333 28.7955,28.0813333 L3.2035,28.0813333 C2.8475,28.0813333 2.51683333,27.8906667 2.33816667,27.5813333 C2.1595,27.272 2.1595,26.8906667 2.33816667,26.5813333 L15.1328333,4.41866667 C15.3128333,4.10933333 15.6421667,3.91866667 16.0008333,3.91866667 Z M16.0008333,6.91866667 L4.93683333,26.0813333 L27.0635,26.0813333 L16.0008333,6.91866667 Z M15.9993667,21.9445333 C16.7353667,21.9445333 17.3327,22.5418667 17.3327,23.2778667 C17.3327,24.0138667 16.7353667,24.6112 15.9993667,24.6112 C15.2647,24.6112 14.6660333,24.0138667 14.6660333,23.2778667 C14.6660333,22.5418667 15.2647,21.9445333 15.9993667,21.9445333 Z M15.9997667,11.762 C16.7344333,11.762 17.3171,12.3833333 17.2704333,13.118 L16.9464333,19.0366667 C16.9161303,19.4984848 16.566268,19.8666391 16.1212392,19.9297596 L15.9851,19.9393333 C15.4744333,19.9393333 15.0544333,19.542 15.0224333,19.0326667 L14.7291,13.1113333 C14.6851,12.3793333 15.2664333,11.762 15.9997667,11.762 Z\" id=\"Color\"><\/path>\r\n                    <\/g>\r\n                <\/g>\r\n            <\/g>\r\n        <\/g>\r\n    <\/g>\r\n<\/svg><\/div><div class=\"msp-alert-body\"><div class=\"msp-alert-title\">Uwaga<\/div><div class=\"msp-alert-content\"><p>Dodane indeksy mog\u0105 mie\u0107 negatywny wp\u0142yw na operacje dodawania, aktualizowania i usuwania rekord\u00f3w w bazie, dlatego nale\u017cy przetestowa\u0107 ich wp\u0142yw na ca\u0142o\u015bciowe funkcjonowanie programu.<\/div><\/div><\/section>\n<p><a name=\"deta\"><\/a><\/p>\n<h3><strong>Database Engine Tuning Advisor<\/strong><\/h3>\n<p>Pe\u0142ne wersje Microsoft SQL Server posiadaj\u0105 dodatkowe narz\u0119dzie o nazwie Database Engine Tuning Advisor. Pozwala ono r\u00f3wnie\u017c na dodanie brakuj\u0105cych indeks\u00f3w na podstawie zapisanego wcze\u015bniej ruchu SQL. Ruch ten mo\u017cna zapisa\u0107 za pomoc\u0105 innego narz\u0119dzia Microsoft SQL Server Profiler, kt\u00f3re r\u00f3wnie\u017c jest dost\u0119pne w pe\u0142nej wersji serwera SQL.<br \/>\nW skr\u00f3cie proces optymalizacji mo\u017cna przedstawi\u0107 w poni\u017cszych krokach:<br \/>\n<div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Zapis ruchu za pomoc\u0105 Microsoft SQL Server Profiler<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Przygotowanie optymalizacji w Database Engine Tuning Advisor<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Zapis rekomendacji<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Przygotowa\u0107 plik usuwaj\u0105cy dodatkowe indeksy i statystyki<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Utworzenie dodatkowych indeks\u00f3w i statystyk<\/li>\n<\/ul>\n<\/div>\n<h4><strong>Zapis ruchu za pomoc\u0105 Microsoft SQL Server Profiler<\/strong><\/h4>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15357\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/sqlprofiler.png\" alt=\"\" width=\"800\" height=\"503\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler.png 800w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler-300x189.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler-768x483.png 768w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler-50x31.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler-600x377.png 600w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler-320x201.png 320w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/p>\n<p>Po wyborze nowego trace\u2019a nale\u017cy wskaza\u0107 szablon Tuning, zaleca si\u0119 zapisa\u0107 plik od razu na dysk i ograniczy\u0107 jego rozmiar np. do 100 MB. Zaznaczony domy\u015blnie parametr Enable file rollover powoduje utworzenie nowego pliku po osi\u0105gni\u0119ciu zadanego limitu. Zbyt du\u017ce pliki znacz\u0105co zwi\u0119kszaj\u0105 czas analizy przez Database Engine Tuning Advisor.<\/p>\n<h4><strong>Przygotowanie optymalizacji w Database Engine Tuning Advisor<\/strong><\/h4>\n<p>Po zako\u0144czeniu zapisu ruchu przechodzimy do Database Engine Tuning Advisor.<br \/>\nNa pierwszej zak\u0142adce \u201eGeneral\u201d nowej sesji wskazujemy plik (File) jako \u017ar\u00f3d\u0142o ruchu do optymalizacji oraz podajemy baz\u0119 do analizy. Na drugiej zak\u0142adce \u201eTuning Options\u201d pozostawiamy domy\u015blne parametry.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15358\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/sqlprofiler2.png\" alt=\"\" width=\"531\" height=\"872\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler2.png 531w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler2-183x300.png 183w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler2-30x50.png 30w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler2-320x525.png 320w\" sizes=\"auto, (max-width: 531px) 100vw, 531px\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15359\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/sqlprofiler3.png\" alt=\"\" width=\"700\" height=\"548\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler3.png 700w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler3-300x235.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler3-50x39.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler3-600x470.png 600w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler3-320x251.png 320w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/p>\n<p>W celu uruchomienia analizy klikamy ikon\u0119 Start Analysis (menu Actions \\ Start Analysis)<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15360\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/sqlprofiler4.png\" alt=\"\" width=\"800\" height=\"376\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler4.png 800w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler4-300x141.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler4-768x361.png 768w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler4-50x24.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler4-600x282.png 600w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/sqlprofiler4-320x150.png 320w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/p>\n<h4><strong>Zapis rekomendacji<\/strong><\/h4>\n<p>Po zako\u0144czonej analizie otrzymujemy szacowany wzrost wydajno\u015bci oraz rekomendacje co do za\u0142o\u017cenia dodatkowych indeks\u00f3w i statystyk. Przygotowane rekomendacje nale\u017cy zapisa\u0107 w pliku poprzez przej\u015bcie do menu Action \\ Save Rekommendations.<br \/>\nZ tak przygotowanych rekomendacji mo\u017cna wybra\u0107 kilka lub wszystkie indeksy i statystyki, jednak\u017ce nale\u017cy pami\u0119ta\u0107, \u017ce ka\u017cdy dodatkowy indeks b\u0119dzie spowalnia\u0142 operacje dodawania, aktualizowania i usuwania rekord\u00f3w w tabeli, kt\u00f3rej on dotyczy. Nast\u0119pnie wybrane indeksy i statystyki nale\u017cy zapisa\u0107 w skrypcie nadaj\u0105c im nazwy, kt\u00f3re b\u0119d\u0105 \u0142atwe do identyfikacji. Na koniec nale\u017cy r\u00f3wnie\u017c przygotowa\u0107 skrypt, kt\u00f3ry b\u0119dzie usuwa\u0142 niestandardowe indeksy i statystyki, poniewa\u017c trzeba je usuwa\u0107 przed przyst\u0105pieniem do konwersji bazy danych. Po zako\u0144czeniu konwersji mo\u017cna je ponownie doda\u0107.<\/p>\n<section class=\"msp-alert-box msp-alert-warning\"><div class=\"msp-alert-icon\"><svg width=\"16\" height=\"16\" class=\"kb-icon kb-icon--warn\" aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\r\n    <g id=\"[AP]-Iconography\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g id=\"Iconography_sortowanie-po-kategorii\" transform=\"translate(-552.000000, -10695.000000)\" fill=\"currentColor\">\r\n            <g id=\"Group-8\" transform=\"translate(286.000000, 548.000000)\">\r\n                <g id=\"Iconography-Card-\" transform=\"translate(218.000000, 10107.000000)\">\r\n                    <g id=\"0-Icons\/-24-\/-Status-\/-Alert-\/-Outline\" transform=\"translate(48.000000, 40.000000)\">\r\n                        <path d=\"M16.0008333,3.91866667 C16.3568333,3.91866667 16.6875,4.10933333 16.8661667,4.41866667 L29.6608333,26.5813333 C29.8408333,26.8906667 29.8408333,27.272 29.6608333,27.5813333 C29.4821667,27.8906667 29.1528333,28.0813333 28.7955,28.0813333 L3.2035,28.0813333 C2.8475,28.0813333 2.51683333,27.8906667 2.33816667,27.5813333 C2.1595,27.272 2.1595,26.8906667 2.33816667,26.5813333 L15.1328333,4.41866667 C15.3128333,4.10933333 15.6421667,3.91866667 16.0008333,3.91866667 Z M16.0008333,6.91866667 L4.93683333,26.0813333 L27.0635,26.0813333 L16.0008333,6.91866667 Z M15.9993667,21.9445333 C16.7353667,21.9445333 17.3327,22.5418667 17.3327,23.2778667 C17.3327,24.0138667 16.7353667,24.6112 15.9993667,24.6112 C15.2647,24.6112 14.6660333,24.0138667 14.6660333,23.2778667 C14.6660333,22.5418667 15.2647,21.9445333 15.9993667,21.9445333 Z M15.9997667,11.762 C16.7344333,11.762 17.3171,12.3833333 17.2704333,13.118 L16.9464333,19.0366667 C16.9161303,19.4984848 16.566268,19.8666391 16.1212392,19.9297596 L15.9851,19.9393333 C15.4744333,19.9393333 15.0544333,19.542 15.0224333,19.0326667 L14.7291,13.1113333 C14.6851,12.3793333 15.2664333,11.762 15.9997667,11.762 Z\" id=\"Color\"><\/path>\r\n                    <\/g>\r\n                <\/g>\r\n            <\/g>\r\n        <\/g>\r\n    <\/g>\r\n<\/svg><\/div><div class=\"msp-alert-body\"><div class=\"msp-alert-title\">Uwaga<\/div><div class=\"msp-alert-content\"><p>Nale\u017cy przygotowa\u0107 skrypt dodaj\u0105cy oraz usuwaj\u0105cy dodawane indeksy, poniewa\u017c dodatkowe indeksy uniemo\u017cliwi\u0105 wykonanie konwersji do nowej wersji programu. Po skonwertowaniu bazy mo\u017cna na nowo doda\u0107 przygotowane indeksy.<\/div><\/div><\/section>\n<section class=\"msp-alert-box msp-alert-warning\"><div class=\"msp-alert-icon\"><svg width=\"16\" height=\"16\" class=\"kb-icon kb-icon--warn\" aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\r\n    <g id=\"[AP]-Iconography\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g id=\"Iconography_sortowanie-po-kategorii\" transform=\"translate(-552.000000, -10695.000000)\" fill=\"currentColor\">\r\n            <g id=\"Group-8\" transform=\"translate(286.000000, 548.000000)\">\r\n                <g id=\"Iconography-Card-\" transform=\"translate(218.000000, 10107.000000)\">\r\n                    <g id=\"0-Icons\/-24-\/-Status-\/-Alert-\/-Outline\" transform=\"translate(48.000000, 40.000000)\">\r\n                        <path d=\"M16.0008333,3.91866667 C16.3568333,3.91866667 16.6875,4.10933333 16.8661667,4.41866667 L29.6608333,26.5813333 C29.8408333,26.8906667 29.8408333,27.272 29.6608333,27.5813333 C29.4821667,27.8906667 29.1528333,28.0813333 28.7955,28.0813333 L3.2035,28.0813333 C2.8475,28.0813333 2.51683333,27.8906667 2.33816667,27.5813333 C2.1595,27.272 2.1595,26.8906667 2.33816667,26.5813333 L15.1328333,4.41866667 C15.3128333,4.10933333 15.6421667,3.91866667 16.0008333,3.91866667 Z M16.0008333,6.91866667 L4.93683333,26.0813333 L27.0635,26.0813333 L16.0008333,6.91866667 Z M15.9993667,21.9445333 C16.7353667,21.9445333 17.3327,22.5418667 17.3327,23.2778667 C17.3327,24.0138667 16.7353667,24.6112 15.9993667,24.6112 C15.2647,24.6112 14.6660333,24.0138667 14.6660333,23.2778667 C14.6660333,22.5418667 15.2647,21.9445333 15.9993667,21.9445333 Z M15.9997667,11.762 C16.7344333,11.762 17.3171,12.3833333 17.2704333,13.118 L16.9464333,19.0366667 C16.9161303,19.4984848 16.566268,19.8666391 16.1212392,19.9297596 L15.9851,19.9393333 C15.4744333,19.9393333 15.0544333,19.542 15.0224333,19.0326667 L14.7291,13.1113333 C14.6851,12.3793333 15.2664333,11.762 15.9997667,11.762 Z\" id=\"Color\"><\/path>\r\n                    <\/g>\r\n                <\/g>\r\n            <\/g>\r\n        <\/g>\r\n    <\/g>\r\n<\/svg><\/div><div class=\"msp-alert-body\"><div class=\"msp-alert-title\">Uwaga<\/div><div class=\"msp-alert-content\"><p>Dodane indeksy mog\u0105 mie\u0107 negatywny wp\u0142yw na operacje dodawania, aktualizowania i usuwania rekord\u00f3w w bazie, dlatego nale\u017cy przetestowa\u0107 ich wp\u0142yw na ca\u0142o\u015bciowe funkcjonowanie programu.<\/div><\/div><\/section>\n<p><a name=\"cca\"><\/a><\/p>\n<h2><strong>Cykliczne czynno\u015bci administracyjne<\/strong><\/h2>\n<p>Cykliczne czynno\u015bci administracyjne s\u0105 bardzo istotne z punktu widzenia bezpiecze\u0144stwa jak i wydajno\u015bci serwera SQL i nale\u017cy traktowa\u0107 je jako obowi\u0105zkowe, a nie opcjonalne.<br \/>\nDo najwa\u017cniejszych czynno\u015bci administracyjnych mo\u017cna zaliczy\u0107:<br \/>\n<div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Kopia bezpiecze\u0144stwa<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Cykliczne odtwarzanie kopii bezpiecze\u0144stwa w celu weryfikacji poprawno\u015bci backupu.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Optymalizacja indeks\u00f3w<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Kontrola poprawno\u015bci baz danych DBCC CHECKDB<\/li>\n<\/ul>\n<\/div>\n<p>Dla wydajno\u015bci szczeg\u00f3lnie dla wi\u0119kszych baz du\u017ce znaczenie ma cykliczna optymalizacja indeks\u00f3w w bazie, kt\u00f3re ze wzgl\u0119du na swoj\u0105 defragmentacj\u0119 b\u0119d\u0105 spowalnia\u0107 prac\u0119 Comarch ERP Optima.<br \/>\nW kolejnych podrozdzia\u0142ach opisano w jaki spos\u00f3b mo\u017cna zautomatyzowa\u0107 niekt\u00f3re z wymienionych czynno\u015bci administracyjnych.<\/p>\n<p><a name=\"mp\"><\/a><\/p>\n<h3><strong>Maintenance Plan \u2013 zautomatyzowane strojenie dla pe\u0142nych wersji MS SQL<\/strong><\/h3>\n<p>Ka\u017cda pe\u0142na wersja MS SQL posiada mechanizm automatyzacji proces\u00f3w, kt\u00f3rych zadaniem jest optymalizowanie bazy danych oraz kreowanie kopii bezpiecze\u0144stwa. Raz skonfigurowany zestaw operacji nazywany Maintenance Plan\u2019em, czyli planem serwisowym, mo\u017ce by\u0107 wielokrotnie uruchamiany w zadanym czasie. Tworzony jest zatem pewien \u201eautomat\u201d, kt\u00f3ry o konkretnej porze wykona za nas operacje, kt\u00f3re mo\u017cna wykona\u0107 z interfejsu programu Comarch ERP Optima.<br \/>\nW niniejszym podrozdziale przedstawiony zosta\u0142 przyk\u0142ad planu serwisowego obejmuj\u0105cego:<br \/>\n<div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Sprawdzenie sp\u00f3jno\u015bci i ci\u0105g\u0142o\u015bci bazy danych (element test\u00f3w integralno\u015bci)<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Odbudow\u0119 indeks\u00f3w (ikona pioruna na oknie listy baz danych w konfiguracji)<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Aktualizacj\u0119 statystyk<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Wykonanie kopii bezpiecze\u0144stwa bazy konfiguracyjnej oraz firmowej<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Usuni\u0119cie plik\u00f3w powsta\u0142ych na potrzeby wykonywania planu<\/li>\n<\/ul>\n<\/div>\n<p>Materia\u0142 zosta\u0142 sporz\u0105dzony przy pomocy MS SQL 2008 za pomoc\u0105 kreatora. Dla wcze\u015bniejszych wersji silnika bazy danych post\u0119puje si\u0119 podobnie.<\/p>\n<h4><strong>Krok 1 \u2013 Uruchomienie kreatora Maintenance Plan\u2019u<\/strong><\/h4>\n<p>Kreator uruchamiany jest z poziomu programu Management Studio (pe\u0142na wersja).<br \/>\n<em>SQL Server \/Management\/Maintenance Plan Wizard<\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15362\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/maintenanceplan.png\" alt=\"\" width=\"379\" height=\"368\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenanceplan.png 379w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenanceplan-300x291.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenanceplan-50x50.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenanceplan-320x311.png 320w\" sizes=\"auto, (max-width: 379px) 100vw, 379px\" \/><\/p>\n<h4><strong>Krok 2 \u2013 Wskazanie nazwy planu oraz terminu jego wykonywania<\/strong><\/h4>\n<p>Kolejnym oknem kreatora, na kt\u00f3re natrafiamy, jest kr\u00f3tki opis mo\u017cliwo\u015bci samego kreatora. Mo\u017cemy zaznaczy\u0107 opcj\u0119, aby nie pokazywa\u0142o si\u0119 ono nast\u0119pnym razem. Interesuje nas nast\u0119pne okno.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15363\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/selectplanproperties.png\" alt=\"\" width=\"504\" height=\"454\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/selectplanproperties.png 504w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/selectplanproperties-300x270.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/selectplanproperties-50x45.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/selectplanproperties-320x288.png 320w\" sizes=\"auto, (max-width: 504px) 100vw, 504px\" \/><\/p>\n<p>Wype\u0142niamy w nim pola odpowiadaj\u0105ce za nazw\u0119 oraz opis planu. Deklarujemy nast\u0119pnie jego ramy czasowe. Mamy dwie mo\u017cliwo\u015bci:<br \/>\n\u201eSeperate schedule for each task\u201d \u2013 opcja pozwala na ustalenie terminu wykonania dla ka\u017cdej operacji planu osobno.<br \/>\n\u201eSingle schedule for entire plan or no schedule\u201d \u2013 opcja pozwala na ustalenie terminu wykonania ca\u0142ego planu lub wykonania go na \u017cyczenie (on demand).<br \/>\nNaciskaj\u0105c przycisk \u201eChange\u201d przechodzimy do okna konfiguracji ram czasowych.<\/p>\n<p>Poni\u017cszy obraz przedstawia wyb\u00f3r ram czasowych dla opisywanego przyk\u0142adu.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15365\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/jobschedule.png\" alt=\"\" width=\"670\" height=\"584\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/jobschedule.png 670w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/jobschedule-300x261.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/jobschedule-50x44.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/jobschedule-600x523.png 600w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/jobschedule-320x279.png 320w\" sizes=\"auto, (max-width: 670px) 100vw, 670px\" \/><\/p>\n<p>Istniej\u0105 cztery kombinacje ram czasowych dla planu. Mamy zatem:<br \/>\n<div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eStart automatically (\u2026)\u201d \u2013 plan uruchomi si\u0119 tu\u017c po uruchomieniu serwera oraz us\u0142ugi SQL Agent<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eStart whenever when CPU (\u2026)\u201d \u2013 plan uruchomi si\u0119, kiedy procesor nie b\u0119dzie obci\u0105\u017cony<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eRecurring\u201d \u2013 plan ustala si\u0119 wed\u0142ug interwa\u0142\u00f3w rok \/ miesi\u0105c \/ dzie\u0144<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eOn time\u201d \u2013 plan wykona si\u0119 tylko raz w zadanym dniu i godzinie<\/li>\n<\/ul>\n<\/div>\n<p>W przyk\u0142adzie u\u017cyjemy opcji terminarza wed\u0142ug interwa\u0142u co tydzie\u0144. Na obrazku wida\u0107, i\u017c ma wykonywa\u0107 si\u0119 w ka\u017cdy pi\u0105tek o godzinie 18:30. Plan ma rozpocz\u0105\u0107 si\u0119 od 15 grudnia 2009 roku i ma nie mie\u0107 ko\u0144ca.<\/p>\n<p>Plan ma symulowa\u0107 koniec tygodnia roboczego, kiedy po godzinie 18:00 wszyscy pracownicy sko\u0144czyli prac\u0119, a serwer SQL nie jest ju\u017c niczym obci\u0105\u017cony.<\/p>\n<p>Poprawne wskazanie ram czasowych dla planu jest bardzo istotne. Uruchomienie go podczas szczytu aktywno\u015bci pracownik\u00f3w mo\u017ce nawet uniemo\u017cliwi\u0107 im prac\u0119. Podczas optymalizacji serwer pobiera du\u017co zasob\u00f3w sprz\u0119towych oraz blokuje elementy struktury bazy danych.<\/p>\n<h4><strong>Krok 3 \u2013 wskazanie sk\u0142adnik\u00f3w planu serwisowego<\/strong><\/h4>\n<p>Kolejne okno kreatora planu przedstawia zakres czynno\u015bci, jakie mo\u017cna wykona\u0107. S\u0105 to:<br \/>\n<div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eCheck Database Inegrity\u201d \u2013 kontrola poprawno\u015bci struktury bazy danych. Nie mo\u017cna myli\u0107 jej z testami integralno\u015bci, kt\u00f3re waliduj\u0105 poprawno\u015b\u0107 samych danych.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eShrink Database\u201d \u2013 pomniejszenie wielko\u015bci bazy danych poprzez usuni\u0119cie ju\u017c niepotrzebnej rezerwy. Serwer SQL podczas pracy alokuje nowe zasoby na potrzeby przysz\u0142ych danych oraz operacji. Nie usuwa natomiast powsta\u0142em w tej spos\u00f3b nadwy\u017cki, kiedy dane zostan\u0105 usuni\u0119te a operacja si\u0119 zako\u0144czy. Shrink pozwala na uwolnienie tych danych. Nale\u017cy jednak pami\u0119ta\u0107 o tym, i\u017c usuni\u0119cie nadmiarowych danych skutkuje fragmentacj\u0105 dysku i mo\u017ce negatywnie wp\u0142ywa\u0107 na wydajno\u015b\u0107 SQL. Nie zaleca si\u0119 shrinkowania bazy danych tu\u017c po wykonaniu odbudowy indeks\u00f3w. Mo\u017ce to przynie\u015b\u0107 efekt odwrotny od zamierzonego.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eReorganize Index\u201d \u2013 defragmentacja indeks\u00f3w.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eRebuild Index\u201d \u2013 odbudowa indeks\u00f3w na nowo. Operacja ta jest bardziej d\u0142ugotrwa\u0142a ani\u017celi defragmentacja, lecz daje lepsze efekty.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eUpdate Statistics\u201d \u2013 aktualizacja \u201cquery optimizer\u2019a\u201d dzi\u0119ki kt\u00f3rej serwer b\u0119dzie potrafi\u0142 wydajniej wykonywa\u0107 polecenia.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eClean Up History\u201d \u2013 usuwanie historii wykonywania i odtwarzania kopii baz danych.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eExecute SQL Server Agent Job\u201d \u2013 wykonanie \u201cJob\u2019a\u201d.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eBack Up Database\u201d \u2013 wykonanie kopi bezpiecze\u0144stwa bazy danych.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eMaintenance Cleanup Task\u201d \u2013 usuni\u0119cie plik\u00f3w powsta\u0142ych podczas wykonywania planu.<\/li>\n<\/ul>\n<\/div>\n<p>Poni\u017cszy obraz przedstawia wyb\u00f3r opcji, kt\u00f3re realizowane s\u0105 w opisywanym przyk\u0142adzie.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15370\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/maintenancewizard.png\" alt=\"\" width=\"503\" height=\"455\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenancewizard.png 503w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenancewizard-300x271.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenancewizard-50x45.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenancewizard-320x289.png 320w\" sizes=\"auto, (max-width: 503px) 100vw, 503px\" \/><\/p>\n<h4><strong>Krok 4 \u2013 wskazanie kolejno\u015bci wykonywania sk\u0142adnik\u00f3w planu serwisowego<\/strong><\/h4>\n<p>Kolejne okno kreatora planu pozwala na zadecydowanie, w jakiej kolejno\u015bci powinny wykona\u0107 si\u0119 poszczeg\u00f3lne sk\u0142adniki planu serwisowego.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15371\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/maintenancewizard2.png\" alt=\"\" width=\"502\" height=\"453\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenancewizard2.png 502w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenancewizard2-300x271.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenancewizard2-50x45.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenancewizard2-320x289.png 320w\" sizes=\"auto, (max-width: 502px) 100vw, 502px\" \/><\/p>\n<h4><strong>Krok 5 \u2013 wskazanie baz danych dla ka\u017cdego elementu planu serwisowego<\/strong><\/h4>\n<p>Ka\u017cdy element planu serwisowego mo\u017cna wykona\u0107 dla dowolnego zestawu baz danych. Naszym celem b\u0119dzie baza konfiguracyjna i baza firmowa.<br \/>\nKrok ten pozwala na elastyczno\u015b\u0107 podczas tworzenia planu dla serwera przechowuj\u0105cego du\u017c\u0105 ilo\u015b\u0107 baz danych. Ka\u017cdej z nich mo\u017cna przypisa\u0107 oddzielne punkty planu.<br \/>\nOg\u00f3lna zasada wyboru baz danych jest wsp\u00f3lna dla wszystkich element\u00f3w planu serwisowego. Mo\u017cemy wybra\u0107:<br \/>\n<div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eAll databases\u201d \u2013 operacja zostanie wykonana na wszystkich bazach danych znajduj\u0105cych si\u0119 na serwerze.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eSystem databases\u201d \u2013 operacja zostanie wykonana tylko dla systemowych baz danych (przyk\u0142ad nie zak\u0142ada \u017cadnych optymalizacji na tym typie baz danych).<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eAll user databases\u201d \u2013 operacja zostanie wykonana tylko dla baz danych u\u017cytkownika, czyli niesystemowych. Dzi\u0119ki tej opcji mamy pewno\u015b\u0107, i\u017c zoptymalizujemy wszystkie bazy danych i nie narazimy na niebezpiecze\u0144stwo bazy systemowe.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eThese databases\u201d \u2013 operacja zostanie wykonana tylko dla zaznaczonych baz danych. Opisywany przyk\u0142ad wykorzystuj\u0119 t\u0119 opcj\u0119.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> \u201eIgnore databases (\u2026)\u201d \u2013 wszystkie te bazy danych, kt\u00f3rych stan nie jest \u201eOnline\u201d nie b\u0119d\u0105 podlega\u0107 optymalizacji.<\/li>\n<\/ul>\n<\/div>\n<p>Poni\u017cszy obraz przedstawia wyb\u00f3r baz danych poddawanych sprawdzaniu poprawno\u015bci. Ka\u017cde kolejne okno opiera si\u0119 na podobnym wyborze.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15374\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/maintenancewizard3.png\" alt=\"\" width=\"563\" height=\"544\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenancewizard3.png 563w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenancewizard3-300x290.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenancewizard3-50x48.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/maintenancewizard3-320x309.png 320w\" sizes=\"auto, (max-width: 563px) 100vw, 563px\" \/><\/p>\n<h4><strong>Krok 6 \u2013 charakterystyczne opcje dla ka\u017cdego elementu planu serwisowego<\/strong><\/h4>\n<p>Podczas wskazywania, kt\u00f3re bazy danych maj\u0105 zosta\u0107 zoptymalizowane, mo\u017cemy ustali\u0107 pewne opcje charakterystyczne dla elementu planu serwisowego.<br \/>\nDla element\u00f3w wykorzystanych w przyk\u0142adzie mamy:<br \/>\n<div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Check Database Inegrity<br \/>\n-Include indexes \u2013 po odznaczeniu proces kontroli nie obejmie indeks\u00f3w, zajmie wi\u0119c mniej czasu.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Rebuild Index<br \/>\n-Reorganize pages with the default amount of free space \u2013 odbudowa indeks\u00f3w z domy\u015blnym<br \/>\n\u201cfill factor\u201d. Oznacza to, i\u017c indeksy zostan\u0105 odbudowane zgodnie z ustawieniami zadanymi podczas kreowana bazy danych, czyli przewidziane przez Comarch.<br \/>\n-Change free space per page percentage to \u2026 \u2013 wskazanie warto\u015bci \u201cfill factor\u201d samodzielnie.<br \/>\n-Sort results in tempdb \u2013 zastosowanie SORT_IN_TEMPDBoption.<br \/>\n-Keep index online while reindexing \u2013 podczas odbudowy indeksy b\u0119d\u0105 mo\u017cliwe do odczytu (ta opcja dost\u0119pna jest dla edycji Enterprise)<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Update Statistics<br \/>\n-Update: \u2013 wyb\u00f3r element\u00f3w poddanych aktualizacji.<br \/>\n-Scan type: \u2013 zakres element\u00f3w poddanych aktualizacji.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Back Up Database<br \/>\n-Sekcja \u201eCreate a backup file for every database\u201d \u2013 opcje zwi\u0105zane z katalogiem, w kt\u00f3rym zostan\u0105 umieszczone pliki kopii zapasowych.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Maintenance Cleanup Task<br \/>\n-Dost\u0119pne opcje pozwalaj\u0105 na zadecydowanie jaki typ danych historycznych ma podlega\u0107 kasowaniu. Wskazuje si\u0119 albo pewien plik, albo folder. Okre\u015bla si\u0119 r\u00f3wnie\u017c wymagany wiek pliku.<\/li>\n<\/ul>\n<\/div>\n<h4><strong>Krok 7 \u2013 wskazanie sposobu raportowania wynik\u00f3w wykonania planu serwisowego oraz zako\u0144czenie pracy z kreatorem.<\/strong><\/h4>\n<p>Ostatnim etapem tworzenia planu serwisowego jest wskazanie \u015bcie\u017cki dost\u0119pu dla pliku raportu. Zawiera on zestawienie podj\u0119tych czynno\u015bci oraz wyniki ich dzia\u0142ania.<br \/>\nPo zako\u0144czeniu kreatora, nowy plan znajduje si\u0119 na li\u015bcie Maintenance Plans w programie Management Studio.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-15377\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2018\/09\/planserwisowy.png\" alt=\"\" width=\"682\" height=\"688\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/planserwisowy.png 682w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/planserwisowy-150x150.png 150w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/planserwisowy-297x300.png 297w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/planserwisowy-50x50.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/planserwisowy-60x60.png 60w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/planserwisowy-600x605.png 600w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2018\/09\/planserwisowy-320x323.png 320w\" sizes=\"auto, (max-width: 682px) 100vw, 682px\" \/><\/p>\n<p>Na tym etapie ko\u0144czy si\u0119 konfiguracja planu serwisowego. Wykona si\u0119 w nast\u0119pny pi\u0105tek o godzinie 18:30.<br \/>\nSzerszy opis wszystkich element\u00f3w Maintenance Plan\u2019u w j\u0119zyku angielskim mo\u017cna uzyska\u0107 na stronie: <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ms188981.aspx\">http:\/\/msdn.microsoft.com\/en-us\/library\/ms188981.aspx<\/a><\/p>\n<p><a name=\"psdbw\"><\/a><\/p>\n<h3><strong>Plan serwisowy dla bezp\u0142atnych wersji MS SQL<\/strong><\/h3>\n<p>Opisany wcze\u015bniej plan serwisowy zbudowa\u0107 mo\u017cna tylko dla p\u0142atnych wersji silnika bazy danych. Nic nie stoi jednak na przeszkodzie, aby samemu sporz\u0105dzi\u0107 podobn\u0105 funkcjonalno\u015b\u0107 i zaproponowa\u0107 j\u0105 klientowi. Podobny efekt uzyskamy poprzez sporz\u0105dzenie:<br \/>\n<div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Skryptu SQL, kt\u00f3ry zawiera\u0142 b\u0119dzie wszystkie potrzebne dla optymalizacji zapytania.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Skryptu JS\/VBS lub pliku .bat, kt\u00f3ry b\u0119dzie zdalnie uruchamia\u0142 skrypt SQL z poziomy konsoli.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Harmonogramu systemu Windows, w kt\u00f3rym zawrze si\u0119 ramy czasowe planu.<\/li>\n<\/ul>\n<\/div>\nW niniejszym biuletynie technicznym za\u0142\u0105czone zosta\u0142y dwa pliki:<br \/>\n<div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> <a href=\"https:\/\/www.ibard.com\/d\/1dade8e56d94fcba5ce1adb87010219c717b000b\">StrojenieBazy.sql<\/a><\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> <a href=\"https:\/\/www.ibard.com\/d\/0e698d5a22919e067593e6f9d38ce1ae51161036\">StrojenieBazCDN.sql<\/a><\/li>\n<\/ul>\n<\/div>\n<p>Plik StrojenieBazy.sql to skrypt zawieraj\u0105cy wszystkie niezb\u0119dne zapytania, aby przeprowadzi\u0107 plan to\u017csamy<br \/>\nz wcze\u015bniej opracowanym Maintenance Plan\u2019em. Przed u\u017cyciem nale\u017cy zmodyfikowa\u0107 w nim dwa parametry:<\/p>\n<p>SET @Nazwa_bazy = 'CDN_DEMO&#8217; &#8212; Tu wpisz nazw\u0119 bazy danych do optymalizacji<br \/>\nSET @Sciezka = N&#8217;C:\\BACKUP\\&#8217; &#8212; Tu wpisz \u015bcie\u017ck\u0119 dost\u0119pu do katalogu dla kopii baz<\/p>\n<p>Skrypt optymalizuje tylko jedn\u0105, wybran\u0105 baz\u0119 danych. Zosta\u0142 tak sporz\u0105dzony dla \u0142atwiejszego zrozumienia jego dzia\u0142ania. Warto prze\u015bledzi\u0107 jego struktur\u0119.<\/p>\n<p>Drugi skrypt o nazwie StrojenieBazCDN.sql wymaga wskazania \u015bcie\u017cki dost\u0119pu do katalogu dla kopii baz. Zastosowano w nim kursor wyszukuj\u0105cy wszystkie bazy danych, kt\u00f3rych nazwa zaczyna si\u0119 od \u2018CDN\u2019. Dla ka\u017cdej z nich przeprowadzona zostanie optymalizacja.<\/p>\n<p>Przed uruchomieniem skryptu nale\u017cy zmodyfikowa\u0107 w nim nast\u0119puj\u0105ce elementy:<\/p>\n<p><strong>sqlcmd.exe -S SERWER -E -i D:\\StrojenieBazCDN.sql -o C:\\Backup<\/strong><br \/>\n<div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> SERWER \u2013 nazwa serwera, na kt\u00f3rym znajduj\u0105 si\u0119 bazy danych.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> D:\\StrojenieBazCDN.sql \u2013 \u015bcie\u017cka dost\u0119pu oraz nazwa skryptu SQL.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> C:\\Backup \u2013 \u015bcie\u017cka docelowego miejsca sk\u0142adowania kopii baz danych (katalog musi istnie\u0107).<\/li>\n<\/ul>\n<\/div>\n<p>Aby uruchomi\u0107 automatyczne wykonywanie planu serwisowego nale\u017cy w harmonogramie systemu Windows utworzy\u0107 now\u0105 regu\u0142\u0119, kt\u00f3ra b\u0119dzie w zadanym czasie uruchamia\u0107 odpowiedni skrypt VBS. Tym sposobem uzyskamy ten sam efekt, jaki przynie\u015b\u0107 mo\u017ce Maintenance Plan.<br \/>\n<a name=\"pliki\"><\/a><\/p>\n<h2>Pliki do pobrania<\/h2>\n<div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> <a href=\"https:\/\/www.ibard.com\/d\/1dade8e56d94fcba5ce1adb87010219c717b000b\">StrojenieBazy.sql<\/a><\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> <a href=\"https:\/\/www.ibard.com\/d\/0e698d5a22919e067593e6f9d38ce1ae51161036\">StrojenieBazCDN.sql<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Data aktualizacji: 28-11-2018 Wprowadzenie Serwer bazy danych jest centralnym miejscem dla ca\u0142ej instalacji Comarch ERP Optima i ma bardzo du\u017ce znaczenie dla wydajnej jej pracy. Dlatego bardzo wa\u017cne jest odpowiednie skonfigurowanie serwera zar\u00f3wno pod wzgl\u0119dem sprz\u0119towym, doboru w\u0142a\u015bciwego oprogramowania oraz jego ustawie\u0144. Dodatkowo z biegiem czasu i dzia\u0142alno\u015bci\u0105 klienta sp\u0142ywaj\u0105 nowe dane s\u0142ownikowe oraz dokumenty, [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_ht_kb_usefulness":5,"_ht_kb_post_views_count":6365,"_ht_kb_article_order":0,"_ht_kb_reading_time":25,"footnotes":""},"ht_kb_category":[413],"ht_kb_tag":[],"class_list":["post-15251","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-techniczne-biuletyny"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/ht_kb\/15251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/comments?post=15251"}],"version-history":[{"count":46,"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/ht_kb\/15251\/revisions"}],"predecessor-version":[{"id":17929,"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/ht_kb\/15251\/revisions\/17929"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/media?parent=15251"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/ht_kb_category?post=15251"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/ht_kb_tag?post=15251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}