1c i postgres instalacija na Windows. Instalirajte PostgreSQL. Povezivanje vanjskog izvora podataka

Ovaj članak ne tvrdi da je potpuna prezentacija svih opcija konfiguracije PostgreSQL-a, a u uporednom testiranju ne pokrivam sve načine rada baze podataka. Savjetujem zainteresovanima da prouče knjigu na linku

Uvod

Dosta sam radio sa PostgreSQL-om i mislim da je to odličan DBMS. Imam radnu bazu podataka od više gigabajta (ne 1C) koja trenutno obrađuje ogromne količine podataka. PostgreSQL odlično koristi indekse, dobro se nosi s paralelnim radnim opterećenjima, funkcionalnost pohranjenih procedura je odlična, postoje dobri alati za administraciju i performanse izvan kutije, a zajednica je kreirala korisni uslužni programi. Ali bio sam iznenađen kada sam saznao da mnogi 1C administratori imaju loše mišljenje o PostgreSQL-u, da je spor i jedva nadmašuje verziju datoteke baze podataka, a samo MSSQL može spasiti situaciju.

Nakon što sam istražio pitanje, pronašao sam mnogo članaka o instalaciji PostgreSQL-a korak po korak za lutke, kako na Linuxu tako i na Windowsu. Ali velika većina članaka opisuje instalaciju dok se ne "instalira - napravimo bazu podataka", i uopće se ne dotiče pitanje konfiguracije. U ostalima, konfiguracija se pominje samo na nivou „specificiraj takve vrijednosti“, praktično bez objašnjenja zašto.

A ako je pristup „instalacije jednim dugmetom“ primjenjiv na MSSQL i mnoge proizvode za Windows općenito, onda se, nažalost, ne odnosi na PostgreSQL. Zadane postavke uvelike ograničavaju njegovu upotrebu memorije, tako da ga možete instalirati čak i na kalkulator i neće ometati rad ostatka softvera. PostgreSQL mora biti konfigurisan za određeni sistem i tek tada može da se pokaže najbolje. U posebno teškim slučajevima možete podesiti postavke PostgreSQL-a, baze podataka i sistem podataka jedni druge, ali to se u većoj mjeri odnosi na Linux sisteme, gdje ima više mogućnosti da se sve prilagodi.

Treba podsjetiti da za 1C PostgreSQL sklop od DBMS programera nije prikladan, samo sastavljen iz zakrpanih 1C izvornih kodova. Gotove kompatibilne sklopove nude 1C (preko ITS diskova i naloga za one sa pretplatom na podršku) i EterSoft

Testiranje je obavljeno u Windows okruženje, ali sve preporuke za konfiguraciju nisu specifične za platformu i primjenjuju se na bilo koji OS.

Testiranje i poređenje

Prilikom testiranja nisam imao za cilj da provodim testove u svim režimima rada i scenarijima, već samo grubu provjeru uspješne konfiguracije.

Za testiranje sam koristio sljedeću konfiguraciju:
Host mašina: Win7, Core i5-760 2.8MHz, 4 jezgra, 12GB RAM-a, VMWare 10
Virtuelno: Win7 x64, 2 jezgra, 4GB RAM-a, odvojeno fizičko HDD za hosting baze podataka (ne SSD)
MSSQL Express 2014
PostgreSQL EtherSoft 9.2.1
1C 8.3.5 1383

Korištena je baza podataka, dt-upload 780MB.
Nakon vraćanja baze podataka:
veličina datoteke 1CD u verziji datoteke - 10GB,
Veličina PostgreSQL baze podataka - 8GB,
Veličina MSSQL baze podataka je 6,7 GB.

Za test sam koristio zahtjev za uzorak ugovora o drugoj ugovornoj strani (21k) sa odabirom dodatnih detalja iz različitih registara, za svaki ugovor je zapravo napravljen poseban uzorak iz registara. Uzeo sam konfiguraciju koja mi je bila pri ruci - jako izmijenjena na osnovu Accounting 3.0.

Tokom testiranja, nekoliko puta sam pokrenuo zahtjev sa jednim i dva klijenta dok se ne dobiju stabilni rezultati. Ignorirao sam prve vožnje.

Testiranje sa jednim klijentom:

Uzorkovanje na hostu iz verzije datoteke sa bazom podataka postavljenom na SSD - 31c
Odabir iz varijante datoteke u virtuelna mašina(Sa tvrdi disk) - 46s
Uzorkovanje iz MSSQL baze podataka - prvi prolaz - 25s ili 9s (očigledno u zavisnosti od relevantnosti DBMS keša) (potrošnja memorije DBMS procesom je bila približno 1,3GB)
Uzorkovanje iz PostgreSQL-a sa zadanim postavkama - 43s (potrošnja memorije nije prelazila 80MB po konekciji)
Uzorkovanje iz optimizovanog PostgreSQL-a - 21s (potrošnja memorije je bila 120MB po konekciji)

Testiranje sa dva klijenta:

Uzorkovanje na hostu iz verzije datoteke sa bazom podataka postavljenom na SSD - 34s svaki
Uzorkovanje iz verzije datoteke u virtuelnoj mašini (sa čvrstog diska) - po 56s
Uzorkovanje iz MSSQL baze podataka - 50s ili 20s (očigledno u zavisnosti od relevantnosti DBMS keša)
Uzorkovanje iz PostgreSQL-a sa zadanim postavkama - po 60s
Uzorkovanje iz optimizovanog PostgreSQL-a - 40s svaki

Napomene o testiranju:

  1. Nakon dodavanja trećeg jezgra, PostgreSQL i MSSQL varijante su počele da rade u testu „dva klijenta“ skoro sa izvođenjem testa „jedan klijent“, tj. uspješno paralelno. Za mene je ostala misterija šta ih je spriječilo da uporede rad na dva jezgra.
  2. MSSQL je istovremeno zauzimao puno memorije, PostgreSQL je zahtijevao znatno manje u svim modovima i oslobađao je skoro svu odmah nakon završetka upita.
  3. MSSQL radi kao jedan proces. PostgreSQL pokreće poseban proces po vezi + servisni procesi. Ovo omogućava da čak i 32-bitna varijanta efikasno koristi memoriju kada obrađuje zahteve od više klijenata.
  4. Povećanje memorije za PostgreSQL u postavkama iznad vrijednosti prikazanih ispod nije dovelo do primjetnog povećanja performansi.
  5. Prvi testovi su u svim slučajevima trajali duže nego u narednim mjerenjima, nisam vršio nikakva posebna mjerenja, ali je MSSQL subjektivno brže startao.

Konfigurisanje PostgreSQL-a

Postoji odlična knjiga na ruskom o konfigurisanju i optimizaciji PostgreSQL-a: ima smisla za svakog ljubitelja slonova da obeleži ovu vezu. Knjiga opisuje mnoge tehnike za optimizaciju DBMS-a, kreiranje sistema otpornih na greške i distribuiranih sistema. Ali sada ćemo pogledati nešto što će svima biti od koristi - konfiguriranje korištenja memorije. PostgreSQL neće koristiti više memorije nego što je dozvoljeno postavkama, a sa zadanim postavkama PostgreSQL koristi minimum memorije. Istovremeno, ne biste trebali specificirati više memorije nego što je dostupno za korištenje - sistem će početi koristiti swap datoteku sa svim posljedicama koje iz toga proizilaze po performanse servera. Brojni savjeti za postavljanje PostgreSQL-a su dati na ITS disku.

Na Windows-u, PostgreSQL konfiguracijske datoteke se nalaze u instalacijskom direktoriju u direktoriju podataka:

  • postgresql.conf- glavni fajl sa postavkama DBMS-a
  • pg_hba.conf- fajl sa postavkama pristupa za klijente. Konkretno, ovdje možete odrediti koji korisnici sa kojih IP adresa mogu da se povežu na određene baze podataka, te da li je potrebno provjeriti korisničku lozinku, i ako jeste, na koji način.
  • pg_ident.conf- fajl sa konverzijom korisničkih imena iz sistemskog u interno (malo je vjerovatno da će većini korisnika biti potreban)

Fajlovi su tekstualni, možete ih uređivati ​​pomoću notepada. Linije koje počinju sa # smatraju se komentarima i ignoriraju se.

Parametri koji se odnose na kapacitet memorije mogu se dopuniti sufiksima kB, MB, GB - kilobajti, megabajti, gigabajti, na primjer, 128MB. Parametri koji opisuju vremenske intervale mogu se dopuniti sufiksima ms, s, min, h, d - milisekunde, sekunde, minute, sati, dani, na primjer, 5min

Ako ste zaboravili lozinku za Postgress, nije problem, možete je upisati pg_hba.conf linija:

Host sve 127.0.0.1/32 povjerenja

I povezati bilo koji korisnik (npr. postgres) u DBMS na lokalnom računalu na 127.0.0.1 bez provjere lozinke.

Optimizacija korištenje memorije

Postavke korištenja memorije se nalaze u postgresql.conf

Optimalne vrijednosti parametara ovise o količini slobodnog ram memorija, veličinu baze podataka i pojedinačnih elemenata baze podataka (tabele i indeksi), složenost upita (u principu treba pretpostaviti da će upiti biti prilično složeni - višestruke veze u upitima su tipičan scenario) i broj istovremeno aktivni klijenti. Usput, PostgreSQL pohranjuje tablice baze podataka i indekse u odvojeni fajlovi (<каталог установки PG>\baza\baza\<идентификатор БД>\), a veličine objekata se mogu procijeniti. Takođe možete koristiti uključeni pgAdmin uslužni program da se povežete sa bazom podataka, proširite „Sheme“ - „javno“ i generišete statistički izveštaj za element „Tabele“.

Zatim ću dati približne vrijednosti od kojih možete započeti podešavanje. Poslije početno podešavanje Preporučuje se pokretanje servera u radnim režimima i praćenje potrošnje memorije. Ovisno o dobivenim rezultatima, možda će biti potrebno prilagoditi vrijednosti parametara.

Prilikom postavljanja servera za testiranje, oslanjao sam se na sljedeće proračune:
Samo 4GB RAM-a. Potrošači - Windows OS, 1C server, PostgreSQL i sistemski disk keš. Pretpostavio sam da se za DBMS može dodijeliti do 2,5 GB RAM-a

Vrijednosti se mogu specificirati sufiksima kB, MB, GB (vrijednosti u kilobajtima, megabajtima ili gigabajtima). Nakon promjene vrijednosti, potrebno je ponovo pokrenuti PostgreSQL uslugu.

shared_buffers - dijeljeni bafer servera

Veličina PostgreSQL predmemorije za čitanje i pisanje koju dijele sve veze. Ako podaci nisu u keš memoriji, oni se čitaju sa diska (moguće kešira OS)

Ako je veličina bafera nedovoljna za pohranjivanje često korištenih radnih podataka, tada će se oni stalno upisivati ​​i čitati iz keša OS-a ili s diska, što će imati izuzetno negativan utjecaj na performanse.

Ali ovo nije sva memorija potrebna za rad, ne treba specificirati previše veliki značaj, inače neće ostati memorije kako za stvarno izvršavanje zahtjeva klijenta (a što ih je više, veća je potrošnja memorije), tako i za OS i druge aplikacije, na primjer, proces 1C servera. Server se takođe oslanja na keš OS i pokušava da ne zadrži u svom baferu ono što je najverovatnije keširano od strane sistema.

Korišćeni test

shared_buffers = 512MB

work_mem- memorija za sortiranje, agregiranje podataka, itd.

Dodjeljuje se za svaki zahtjev, moguće nekoliko puta za složene zahtjeve. Ako nema dovoljno memorije, PostgreSQL će koristiti privremene datoteke. Ako je vrijednost prevelika, RAM se može previše koristiti i OS će početi koristiti swap datoteku sa odgovarajućim padom performansi.

Postoji preporuka da se pri izračunavanju količina raspoložive memorije uzme u minus shared_buffers, i podijelite sa brojem istovremeno izvršenih zahtjeva. U slučaju složenih upita, djelitelj treba povećati, tj. smanjiti rezultat. Za slučaj koji se razmatra, na osnovu 5 aktivnih korisnika (2.5GB-0.5GB (shared_buffers))/5=400MB. Ako DBMS smatra da su upiti prilično složeni, ili ako se pojave dodatni korisnici, vrijednost će se morati smanjiti.

Za jednostavne upite dovoljne su male vrijednosti - do nekoliko megabajta, ali za složene upite (a ovo je tipičan scenarij za 1C) bit će potrebno više. Preporuka - za memoriju 1-4GB možete koristiti vrijednosti od 32-128MB. Koristio sam ga na testu

radna_mem = 128MB

održavanje_rad_mem- memorija za naredbe za prikupljanje smeća, statistiku, kreiranje indeksa.

Preporučljivo je postaviti vrijednost na 50-75% veličine najveće tabele ili indeksa, ali tako da ima dovoljno memorije za pokretanje sistema i aplikacija. Preporučuje se postavljanje vrijednosti veće od work_mem. Koristio sam ga na testu
maintenance_work_mem = 192MB

temp_buffers- bafer za privremene objekte, uglavnom za privremene tabele.

Možete instalirati oko 16 MB. Koristio sam ga na testu
temp_buffers = 32MB

efektivna_veličina_cache- približna veličina keša diska sistema datoteka.

Optimizator koristi ovu vrijednost kada gradi plan upita za procjenu vjerovatnoće da će podaci biti pronađeni u kešu (sa brzim slučajnim pristupom) ili na sporom disku. U Windowsu, trenutna količina memorije koja je dodijeljena za keš memoriju može se vidjeti u upravitelju zadataka.

Autovakuum - "odvoz smeća"

PostgreSQL, kao tipičan predstavnik „verzionisanih“ DBMS-ova (za razliku od onih koji blokiraju), ne blokira nezavisno tabele i zapise od čitanja transakcija prilikom promene podataka (u slučaju 1C, to radi sam 1C server). Umjesto toga, kreira se kopija izmijenjenog zapisa, koja postaje vidljiva narednim transakcijama, dok postojeći nastavljaju vidjeti podatke koji su bili aktuelni na početku njihove transakcije. Kao rezultat toga, zastarjeli podaci se akumuliraju u tabelama - prethodne verzije promijenjeni zapisi. Da bi DBMS koristio oslobođeni prostor, potrebno je izvršiti “prikupljanje smeća” – odrediti koji se od zapisa više ne koriste. Ovo se može eksplicitno uraditi pomoću SQL naredbe VACUUM, ili sačekajte da tabela bude obrađena od strane automatskog sakupljača smeća - AUTOVAKUUM. Također, do određene verzije, prikupljanje smeća je bilo povezano sa prikupljanjem statistike (planer koristi podatke o broju zapisa u tabelama i distribuciji vrijednosti indeksiranih polja za izgradnju optimalnog plana upita). S jedne strane, prikupljanje smeća se mora obaviti tako da tabele ne rastu i efikasno koriste prostor na disku. S druge strane, iznenada započeto sakupljanje smeća dodatno opterećuje disk i tabele, što dovodi do povećanja vremena izvršavanja upita. Sličan efekat stvara se automatskim prikupljanjem statistike (očito se može pokrenuti komandom ANALIZA ili zajedno sa odvozom smeća VACUUM ANALYZE). I iako PostgreSQL poboljšava ove mehanizme od verzije do verzije da bi se minimizirao Negativan uticaj na performanse (na primjer, u ranijim verzijama, sakupljanje smeća je potpuno blokiralo pristup tablici, od verzije 9.0 rad VACUUM ubrzano), ovdje postoji nešto za konfiguraciju.

Možete potpuno onemogućiti automatsko usisavanje sa sljedećim parametrom:

autovacuum = isključeno

Takođe, da bi Autovacuum radio, potreban je parametar track_counts = on, inače neće raditi.

Obje opcije su podrazumevano omogućene. U stvari, autovacuum se ne može potpuno onemogućiti - čak i kada je autovacuum = isključen, ponekad (nakon velikog broja transakcija) autovacuum će se pokrenuti.

komentar: VACUUM obično ne smanjuje veličinu datoteke tabele, samo označava slobodne oblasti dostupne za ponovnu upotrebu. Ako želite fizički osloboditi višak prostora i minimizirati zauzeti prostor na disku, trebat će vam naredba VACUUM FULL. Ova opcija blokira pristup tablici dok je pokrenuta i obično nije potrebna. Više informacija o korištenju naredbe VACUUM možete pronaći u dokumentaciji (na engleskom).

Ako Autovacuum nije u potpunosti onemogućen, možete konfigurirati njegov utjecaj na izvršenje upita koristeći sljedeće parametre:

autovacuum_max_workers- maksimalan broj paralelno pokrenutih procesa čišćenja.

autovacuum_naptime - minimalni interval manji od kojeg autovacuum neće započeti. Zadana vrijednost je 1 minut. Možete ga povećati, a onda ako se podaci često mijenjaju, analiza će se obavljati rjeđe.

autovacuum_vacuum_threshold, - broj promijenjenih ili izbrisanih zapisa u tabeli potrebnih za pokretanje procesa prikupljanja smeća VACUUM ili prikupljanje statistike ANALIZA. Podrazumevano je 50.

autovacuum_vacuum_scale_factor , autovacuum_analyze_scale_factor - koeficijent veličine tabele u dodanim zapisima autovacuum_vacuum_threshold I autovacuum_analyze_threshold respektivno. Podrazumevane vrednosti su 0,2 (tj. 20% od broja zapisa) i 0,1 (10%) respektivno.

Razmotrimo primjer sa tablicom sa 10.000 zapisa. Zatim, sa zadanim postavkama, nakon 50+10000*0.1=1050 promijenjenih ili obrisanih zapisa, započinje prikupljanje statistike ANALIZA, a nakon promjena 2050. - odvoz smeća VACUUM.

Ako povećate prag i scale_factor, procesi održavanja će se izvoditi rjeđe, ali male tablice mogu značajno porasti. Ako se baza podataka sastoji prvenstveno od malih tabela, ukupno povećanje potrošnje prostora na disku može biti značajno, tako da možete povećati ove vrijednosti, ali mudro.

Stoga bi moglo imati smisla povećati interval autovacuum_naptime i malo povećati prag i faktor skale. U učitanim bazama podataka, alternativa može biti značajno povećanje scale_factor (vrijednost od 1 će omogućiti da se tabele „nabubre” dvaput) i postavljanje dnevnog izvršavanja na planer VACUUM ANALYZE tokom perioda minimalnog opterećenja baze podataka.

default_statistics_target - dodjeljuje količinu statistike prikupljene naredbom ANALIZA. Podrazumevana vrijednost je 100. Veće vrijednosti povećavaju vrijeme izvršenja naredbe ANALYZE, ali dozvoljavaju planeru da napravi efikasnije planove upita. Postoje preporuke za povećanje na 300.

Performanse se mogu kontrolisati AUTOVAKUUM, čineći ga dužim, ali manje stresnim za sistem.

vacuum_cost_page_hit- veličina "fine" za obradu bloka koji se nalazi u shared_buffers. Povezano sa potrebom da se blokira pristup baferu. Zadana vrijednost 1

vacuum_cost_page_miss - veličina "fine" za obradu bloka na disku. Povezan sa blokiranjem bafera, traženjem podataka u baferu, čitanjem podataka sa diska. Zadana vrijednost 10

vacuum_cost_page_dirty- veličina "globe" za modifikaciju bloka. Povezano sa potrebom resetovanja izmenjenih podataka na disk. Zadana vrijednost 20

vacuum_cost_limit- maksimalni iznos "globa" nakon kojeg se proces montaže može "zamrznuti" za vrijeme trajanja vacuum_cost_delay. Podrazumevano 200

vacuum_cost_delay- vrijeme za "zamrzavanje" procesa prikupljanja smeća nakon dostizanja vacuum_cost_limit. Zadana vrijednost 0ms

autovacuum_vacuum_cost_delay- vrijeme za "zamrzavanje" procesa sakupljanja smeća za autovakuum. Podrazumevano je 20ms. Ako je postavljeno na -1, koristit će se vrijednost vacuum_cost_delay

autovacuum_vacuum_cost_limit- maksimalna veličina "fine" za autovakuum. Zadana vrijednost -1 - vacuum_cost_limit vrijednost se koristi

Prijavljena upotreba vacuum_cost_page_hit = 6, vacuum_cost_limit = 100, autovacuum_vacuum_cost_delay = 200ms smanjuje uticaj AUTOVAKUUM-a do 80%, ali utrostručuje njegovo vreme izvršenja.

Podešavanje snimanja na disk

Kada se transakcija završi, PostgreSQL prvo upisuje podatke u poseban dnevnik transakcija WAL (Write-ahead log), a zatim u bazu podataka nakon što se garantuje da će podaci dnevnika biti upisani na disk. Zadani mehanizam je fsync, kada PostgreSQL nasilno izbaci podatke (log) iz keša OS diska na disk, i tek nakon uspješnog pisanja (log) klijent je obaviješten da je transakcija uspješno završena. Korištenje dnevnika transakcija vam omogućava da dovršite transakciju ili vratite bazu podataka ako dođe do greške prilikom pisanja podataka.

U zauzetim sistemima sa velikim količinama pisanja, možda ima smisla premjestiti dnevnik transakcija na poseban fizički disk (ali ne na drugu particiju istog diska!). Da biste to učinili, trebate zaustaviti DBMS, premjestiti pg_xlog direktorij na drugu lokaciju i kreirati simboličku vezu na staroj lokaciji, na primjer, koristeći uslužni program za spajanje. Far Manager (Alt-F6) također može kreirati veze. U tom slučaju, morate biti sigurni da nova lokacija ima prava pristupa za korisnika koji koristi PostgreSQL (obično postgres).

Ako postoji veliki broj operacija modifikacije podataka, možda ćete morati povećati vrijednost checkpoint_segments, koja kontrolira količinu podataka koji mogu čekati da se prenesu iz dnevnika u samu bazu podataka. Zadana vrijednost je 3. Treba uzeti u obzir da je prostor dodijeljen za dnevnik, izračunat po formuli (checkpoint_segments * 2 + 1) * 16 MB, što će sa vrijednošću od 32 već zahtijevati više od 1 GB diska prostor.

PostgreSQL ispušta podatke iz keša OS datoteka na disk nakon svake transakcije pisanja završi. S jedne strane, to garantuje da su podaci na disku uvijek ažurni, s druge strane, sa velikim brojem transakcija, performanse se smanjuju. Onemogućite potpuno fsync moguće specificiranjem

fsync=isključeno
full_page_writes = isključeno

To se može učiniti samo ako imate 100% povjerenja u opremu i UPS (izvor neprekidno napajanje). U suprotnom, u slučaju pada sistema, postoji rizik od dobijanja uništene baze podataka. U svakom slučaju, RAID kontroler s baterijom za napajanje memorije nenapisanih podataka također ne bi škodio.

Definitivna alternativa može biti korištenje parametra

synchronous_commit = isključeno

U ovom slučaju, nakon uspješnog odgovora za dovršetak transakcije, može proći neko vrijeme prije nego što se transakcija bezbedno upiše na disk. U slučaju iznenadnog isključivanja, baza podataka neće biti uništena, ali podaci iz nedavnih transakcija mogu biti izgubljeni.

Ako ne onemogućite fsync u potpunosti, možete odrediti metodu sinhronizacije u parametru. Članak sa ITS diska se odnosi na pg_test_fsync uslužni program, ali nije pronađen u mojoj PostgreSQL verziji. Prema 1C, u njihovom slučaju u Windowsu metoda se pokazala kao optimalna open_datasync(očigledno, ovo je metoda koja se koristi po defaultu).

Ako se koristi mnogo malih transakcija pisanja (u slučaju 1C ovo može biti masovno ažuriranje direktorija izvan transakcije), kombinacija parametara commit_delay (vrijeme kašnjenja završetka transakcije u mikrosekundama, zadano 0) i commit_siblings (zadano 5) može pomoći. Kada su opcije omogućene, završetak transakcije može biti odgođen commit_delay if ovog trenutka Izvrše se najmanje commit_siblings transakcije. U ovom slučaju, rezultat svih dovršenih transakcija bit će zapisan zajedno kako bi se optimiziralo upisivanje na disk.

Ostali parametri koji utiču na performanse

wal_buffers- količina memorije u shared_buffers za održavanje dnevnika transakcija. Preporuka: sa 1-4GB dostupne memorije, koristite vrijednosti od 256KB-1MB. U dokumentaciji se navodi da se korištenjem vrijednosti "-1" automatski prilagođava vrijednost ovisno o vrijednosti shared_buffers.

random_page_cost- “trošak” nasumičnog čitanja, koji se koristi prilikom pretraživanja podataka pomoću indeksa. Zadana vrijednost je 4.0. Jedinica je vrijeme sekvencijalnog pristupa podacima. Za brze diskove, posebno SSD-ove, ima smisla smanjiti vrijednost; u ovom slučaju, PostgreSQL će aktivnije koristiti indekse.

Knjiga na linku ima još neke parametre koji se mogu konfigurisati. Također se preporučuje da pročitate PostgreSQL dokumentaciju o dodjeli specifičnih parametara.

Preporučljivo je promijeniti parametre iz odjeljka PODEŠAVANJE UPITA, posebno one koji se odnose na zabranu raspoređivača da koristi određene metode pretraživanja, samo ako imate potpuno razumijevanje onoga što radite. Vrlo je lako optimizirati jednu vrstu upita i uništiti performanse svih ostalih. Efikasnost promjene većine parametara u ovoj sekciji ovisi o podacima u bazi podataka, upitima prema tim podacima (tj. korišćenoj verziji 1C, između ostalog) i verziji DBMS-a.

Zaključak

PostgreSQL je moćan DBMS u sposobnim rukama, ali zahtijeva pažljivu konfiguraciju. Može se koristiti u kombinaciji sa 1C i dobiti pristojne performanse, a njegova besplatna priroda bit će vrlo lijep bonus.

Kritike i dodaci ovom članku su dobrodošli.

korisni linkovi

http://postgresql.leopard.in.ua/ - web stranica knjige " Rad sa PostgreSQL konfiguracijom i skaliranjem ", najkompletniji i najrazumljiviji vodič, po mom mišljenju, za konfigurisanje i administriranje PostgreSQL-a

http://etersoft.ru/products/postgre - ovdje možete preuzeti 1C-kompatibilnu verziju PostgreSQL-a za Windows i razne distribucije i verzije Linuxa. Za one koji nemaju pretplatu na ITS ili im je potrebna verzija za Linux verzija, koji nije predstavljen na v8.1c.ru.

http://www.postgresql.org/docs/9.2/static/ - zvanična dokumentacija o PostgreSQL-u (na engleskom)

Članci sa ITS diska o postavljanju PostgreSQL-a

Istorija uređivanja članka

  • 29.01.2015. - objavljena početna verzija
  • 31.01.2015 - članak je dopunjen odeljkom AUTOVAKUUM, dodat je link na originalnu dokumentaciju.

U budućnosti namjeravam testirati rad DBMS-a u načinu dodavanja i mijenjanja podataka.

Ugradićemo sklop kompanije Postgres Professional. Na stranici sa verzijom za 1C:Enterprise pronaći ćemo informacije o instalaciji najnovije verzije PostgreSQL-a na CentOS 7.

Hajde da povežemo spremišta i instaliramo PostgreSQL 9.6:

Sudo rpm -ivh http://1c.postgrespro.ru/keys/postgrespro-1c-centos96.noarch.rpm sudo yum makecache sudo yum install postgresql-pro-1c-9.6

Osnovno postavljanje PostgreSQL-a

Inicijaliziramo servisne baze podataka s ruskom lokalizacijom:

Su postgres /usr/pgsql-9.6/bin/initdb -D /var/lib/pgsql/9.6/data --locale=ru_RU.UTF-8 izlaz iz servisa postgresql-9.6 initdb

Pokrenite PostgreSQL uslugu i dodajte je u pokretanje:

Systemctl omogući postgresql-9.6 systemctl start postgresql-9.6 systemctl status postgresql-9.6

Postavili smo lozinku za postgres korisnika kako bismo se mogli daljinski povezati na server:

Su - postgres psql IZMIJENI KORISNIKA postgres SA ŠIFRIRANOM LOZINKOM "vaša lozinka"; \q izlaz

Mcedit /var/lib/pgsql/9.6/data/pg_hba.conf

u datoteci koja se otvori, dekomentirajte i promijenite redove:

host sve sve 127.0.0.1/32 ident on host sve sve 127.0.0.1/32 md5

host sve sve 0.0.0.0/0 ident on host sve sve 0.0.0.0/0 md5

Optimizacija postavki PostgreSQL (postgresql.conf) za 1C:Enterprise

Ovdje će biti postavke za PostgreSQL koji radi na ESXi 6.5 virtuelnoj mašini.

Resursi dodijeljeni za VM:

procesor - 8 vCPU;

memorija - 48 GB;

disk za OS - 50 GB na LUN hardverskom RAID1 sa SAS HDD-a;

disk za bazu podataka - 170 GB na softverskom RAID1 sa SSD-a

disk za logove - 100 GB na softverskom RAID1 sa SSD-a

Da biste uredili postavke, pokrenite naredbu:

Mcedit /var/lib/pgsql/9.6/data/postgresql.conf

Prokomentirani parametri koje ćemo promijeniti moraju biti aktivirani.

CPU

autovacuum_max_workers = 4

autovacuum_max_workers = NCores/4..2 ali ne manje od 4

Broj procesa autovakuma. Opšte pravilo je da što više zahtjeva za pisanje, to je više procesa. U bazi podataka samo za čitanje dovoljan je jedan proces.

ssl=isključeno

Isključite šifriranje. Za sigurne podatkovne centre, enkripcija je besmislena, ali dovodi do povećanog opterećenja procesora

Memorija

shared_buffers = 12 GB

shared_buffers = RAM/4

Količina memorije koju je dodijelio PgSQL za dijeljenu keš memoriju stranica. Ova memorija se dijeli između svih PgSQL procesa. operativni sistem On sam kešira podatke, tako da nema potrebe da dodijelite svu raspoloživu RAM memoriju za keš memoriju.

temp_buffers = 256MB

Maksimalan broj stranica za privremene tabele. One. ovo je gornja granica veličine privremenih tabela u svakoj sesiji.

radna_mem = 64MB

work_mem = RAM/32..64 ili 32MB..128MB

Ograničenje memorije za obradu jednog zahtjeva. Ova memorija je individualna za svaku sesiju. Teoretski, maksimalna potrebna memorija je jednaka max_connections * work_mem, u praksi se to ne događa jer većina sesija gotovo uvijek čeka. Ovu savjetodavnu vrijednost koristi optimizator: pokušava predvidjeti veličinu potrebne memorije za upit, a ako je ova vrijednost veća od work_mem, govori izvršiocu da odmah kreira privremenu tablicu. work_mem nije ograničenje u punom smislu: optimizator može promašiti, a zahtjev će zauzeti više memorije, možda mnogo puta više. Ova vrijednost se može smanjiti praćenjem broja kreiranih privremenih datoteka:

maintenance_work_mem = 2GB

maintenance_work_mem = RAM/16..32 ili work_mem * 4 ili 256MB..4GB

Ograničenje memorije za zadatke održavanja, kao što je prikupljanje statistike (ANALYZE), prikupljanje smeća (VACUUM), kreiranje indeksa (CREATE INDEX) i dodavanje stranih ključeva. Veličina memorije koja je dodijeljena za ove operacije trebala bi biti uporediva s fizička veličina najveći indeks na disku.

efektivna_cache_size = 36GB

efektivna_cache_size = RAM - dijeljeni_baferi

Procjena veličine predmemorije sistema datoteka. Povećanje parametra povećava sklonost sistema odabiru IndexScan planova. I ovo je dobro.

Diskovi

efektivno_io_koncurrency = 5

Procjena istovremenih zahtjeva prema sistemu diska koji može istovremeno da servisira. Za jedan disk = 1, za RAID - 2 ili više.

random_page_cost = 1.3

random_page_cost = 1,5-2,0 za RAID, 1,1-1,3 za SSD

Trošak čitanja nasumične stranice (podrazumevano 4). Što je manje vrijeme traženja diskovnog sistema, to bi ovaj parametar trebao biti manji (ali > 1.0). Preterano velika vrednost parametra povećava sklonost PgSQL-a da bira planove koji skeniraju celu tabelu (PgSQL smatra da je jeftinije čitati celu tabelu uzastopno nego nasumično čitati indeks). I to je loše.

autovacuum=on

Uključivanje autovakuma.

autovacuum_naptime = 20s

Vrijeme mirovanja procesa autovakuma. Ako je vrijednost prevelika, tabele neće imati vremena za usisavanje i, kao rezultat toga, naduvavanje i veličina tabela i indeksa će se povećati. Mala vrijednost će rezultirati nepotrebnim zagrijavanjem.

bgwriter_delay = 20ms

Vrijeme mirovanja između ciklusa pisanja na disk u procesu pisanja u pozadini. Ovaj proces je odgovoran za sinhronizaciju stranica koje se nalaze u shared_buffers sa diskom. Prevelika vrijednost za ovaj parametar će povećati opterećenje procesa kontrolne točke i procesa koji opslužuju sesije (pozadina). Mala vrijednost će rezultirati punim opterećenjem jedne od jezgri.

bgwriter_lru_multiplier = 4.0

bgwriter_lru_maxpages = 400

Opcije koje kontrolišu intenzitet snimanja procesa snimanja u pozadini. U jednom ciklusu, bgwriter ne piše više od onoga što je napisano u prošlom ciklusu, pomnoženo sa bgwriter_lru_multiplier, ali ne više od bgwriter_lru_maxpages.

synchronous_commit = isključeno

Onemogućite sinhronizaciju diska u vrijeme urezivanja. Stvara rizik od gubitka poslednjih nekoliko transakcija (unutar 0,5-1 sekunde), ali garantuje integritet baze podataka; nema praznina u lancu urezivanja. Ali značajno povećava produktivnost.

wal_keep_segments = 256

wal_keep_segments = 32..256

Maksimalan broj WAL segmenata između kontrolnih tačaka. Prečeste kontrolne tačke dovode do značajnog opterećenja pisanja na podsistemu diska. Svaki segment je veličine 16MB

wal_buffers = 16 MB

Količina dijeljene memorije koja će se koristiti za međuspremnik WAL podataka koji još nisu zapisani na disk. Podrazumevana vrijednost -1 specificira veličinu jednaku 1/32 (oko 3%) od , ali ne manju od 64 KB i ne veću od veličine jednog WAL segmenta (obično 16 MB). Ova vrijednost se može postaviti ručno ako je automatski odabrana premala ili velika, ali svaki pozitivan broj manji od 32 KB će se tretirati kao 32 KB. Ovaj parametar se može postaviti samo pri pokretanju servera.

Sadržaj WAL bafera se upisuje na disk kada je svaka transakcija predana, tako da je malo vjerovatno da će vrlo velike vrijednosti donijeti veliku korist. Međutim, vrijednost od najmanje nekoliko megabajta može poboljšati performanse pisanja na zauzetom serveru kada mnogo klijenata izvršava transakcije odjednom. Automatsko podešavanje, koje radi na zadanoj vrijednosti (-1), odabire razumne vrijednosti u većini slučajeva.

default_statistics_target = 1000

Postavlja zadano ograničenje cilja statistike koje se primjenjuje na stupce za koje ALTER TABLE SET STATISTICS nije specificirao pojedinačna ograničenja. Što je veća postavljena vrijednost, to je duže potrebno za pokretanje ANALYZE, ali može biti veći kvalitet procjena planera. Zadana vrijednost za ovaj parametar je 100.

checkpoint_completion_target = 0,9

Stepen "razmazanosti" kontrolnog punkta. Brzina snimanja tokom kontrolne tačke je podešena tako da je vreme kontrolne tačke jednako vremenu proteklom od prošlosti, pomnoženo sa ciljem checkpoint_completion_.

min_wal_size = 4G
max_wal_size = 8G

min_wal_size = 512MB .. 4G
max_wal_size = 2 * min_wal_size

Minimalna i maksimalna veličina WAL datoteka. Slično checkpoint_segments

fsync=on

Onemogućavanje opcije rezultira povećanjem performansi, ali postoji značajan rizik od gubitka svih podataka ako se napajanje iznenada isključi. Pažnja: ako RAID ima keš memoriju i nalazi se u režimu povratnog upisivanja, provjerite prisustvo i funkcionalnost keš baterije RAID kontrolera! U suprotnom, podaci upisani u RAID keš memoriju mogu biti izgubljeni kada se napajanje isključi, i kao rezultat toga, PgSQL ne garantuje integritet podataka.

row_security = isključeno

Onemogućavanje kontrole rezolucije na nivou zapisa

enable_nestloop = isključeno

Omogućava ili onemogućuje planerovo korištenje planova spajanja ugniježđene petlje. Nije moguće potpuno eliminirati ugniježđene petlje, ali ako isključite ovu opciju, planer neće koristiti ovu metodu, ako se drugi mogu primijeniti. Podrazumevano, ova postavka je uključena.

Brave

max_locks_per_transaction = 256

Maksimalan broj zaključavanja indeksa/tablice u jednoj transakciji

Postavke za 1C platformu

standard_conforming_strings = isključeno

Dozvolite \ karakter da se koristi za izlaz

escape_string_warning = isključeno

Nemojte upozoravati na korištenje \ znaka za bježanje

Sigurnosne postavke

Uvjerimo se da je PostgreSQL server vidljiv samo 1C: Enterprise serveru instaliranom na istoj mašini.

listen_addresses = 'localhost'

Ako je 1C: Enterprise server instaliran na drugom stroju ili postoji potreba da se povežete sa DBMS serverom pomoću PGAdmin snap-ina, umjesto toga localhost potrebno je da navedete adresu ove mašine.

Skladištenje baze podataka

PostgreSQL je, kao i skoro svaki DBMS, kritičan za diskovni podsistem, stoga, da bismo povećali performanse DBMS-a, postavićemo PostgreSQL sistem, logove i same baze podataka na različite diskove.

Zaustavljanje servera

Systemctl stop postgresql-9.6

Prebacujemo zapise na 120GB SSD:

Mv /var/lib/pgsql/9.6/data/pg_xlog /raid120 mv /var/lib/pgsql/9.6/data/pg_clog /raid120 mv /var/lib/pgsql/9.6/data/pg_log /raid120

Ln -s /raid120/pg_xlog /var/lib/pgsql/9.6/data/pg_xlog ln -s /raid120/pg_clog /var/lib/pgsql/9.6/data/pg_clog ln -s /raid120/pg_log /var pgsql/9.6/data/pg_log

Također ćemo prenijeti direktorij sa bazama podataka:

Mv /var/lib/pgsql/9.6/data/base /raid200

Ln -s /raid200/base /var/lib/pgsql/9.6/data/base

Pokrenimo server i provjerimo njegov status

Systemctl start postgresql-9.6 systemctl status postgresql-9.6

Slučaj upotrebe kao PostgreSQL server baze podataka windows platforma nije baš popularno, ali obično se javlja kada trebate nekako uštedjeti novac na proizvodima iz MS-a. Postoje i specijalizovane aplikacije koje najbolje rade sa PostgreSQL. Za 1c postoji modifikovana verzija PostgreSQL-a koja, kako programeri uveravaju, daje nivo performansi i tolerancije grešaka uporediv sa MSSQL-om. Da li je to zaista tako, hajde da to proverimo u praksi :)

1. Instalirajte PostgreSQL

Preuzmite najnoviju verziju PostgreSQL 64-bit 9.1.2-1.1C sa 1c web stranice, raspakujte arhivu, pokrenite msi paket, onaj bez int nema veliku veličinu datoteke.

Kliknite na Start.
Ostavite opcije instalacije kao zadane.

Postavite lozinku za korisnika postgres od koje će servis početi . Kliknite na Next. Ako prvi put instalirate PostgreSQL, čarobnjak će od vas zatražiti da kreirate korisnika postgres.

U fazi inicijalizacije baze podataka odaberite UTF8 kodiranje. Postavite prijavu i lozinku za internog postgres korisnika. Pažnja! Korisničke lozinke PostgreSQL usluge i korisnička lozinka interne PostgreSQL baze podataka ne smiju biti iste. Lozinka mora imati najmanje četiri znaka. Ako planirate pokrenuti 1C server i PostgreSQL na različitim strojevima, tada morate označiti potvrdni okvir "Podržava veze s bilo kojeg IP-a, ne samo lokalnog hosta". Kliknite na Next i Next ponovo. :)

Kliknite Sljedeće još dva puta i pričekajte da se instalacija završi.

Zatim idite na Start\Svi programi\PostgreSQL 9.1.2-1.1C(x64). Pokrenite pgAdmin III uslužni program za administraciju. Pokušajmo se povezati s bazom podataka. Unesite lozinku koju ste naveli tokom instalacije.
I dobijamo sledeću grešku: Greška pri povezivanju sa serverom: FATALNO: autentifikacija lozinke nije uspela za korisnika “postgres”.

Sasvim neočekivano, s obzirom da je lozinka ispravno upisana. Odlučio sam da se petljam sa pg_hba.conf, ali na prvi pogled je sve u redu.

# TIPI BAZA PODATAKA KORISNIČKA ADRESA METODA # IPv4 lokalne veze: host sve postgres::1/128 md5 host sve postgres 127.0.0.1/32 md5 host sve postgres 192.168.1.0/24 md5

Odlučio sam promijeniti način autorizacije iz md5 u trust. Ponovo pokrećem uslugu i pokušavam ponovo da se povežem na bazu podataka. Ovaj put dobijam ovu poruku.
Zaista, više od jednog je dostupno na pgAdmin web stranici nova verzija. Nakon čega je veza sa bazom podataka uspješna!!!?!! Sjećam se da ranije md5 nije izazivao takve probleme, očito je ovaj kvar stvarno povezan stara verzija pgAdmin.
Sada možemo kreirati bazu podataka za potrebe 1C, ili to učiniti koristeći sam 1C :)

2. Instalacija 1C enterprise 8.2.

Za instalaciju napominjemo sljedeće komponente: 1C:Enterprise, 1C:Enterprise Server, moduli proširenja web servera, administraciju servera 1C:Enterprise.
U fazi instalacije „Instaliraj 1C Enterprise kao uslugu“ postavili smo lozinku za korisnika USR1C82.
Kliknite na dalje i pratite napredak instalacije :) Za korisnika USR1CV82 Sljedeća prava moraju biti dodijeljena tokom instalacije:

Prijavite se kao servis (Prijavite se kao servis), Prijavite se kao skupni posao (Prijavite se kao batch posao). Možete ga pogledati na Lokalna pravila računara\Konfiguracija računara\Postavke Windowsa\Sigurnosne postavke\Lokalne politike\Dodjela prava korisnika.

Idemo na opremu Administracija 1C Enterprise servera, Vidimo da je klaster narastao i da visi na portu 1541. Naš server je takođe prisutan na kartici „Radni serveri“. Sada možete dodati bazu podataka na 1C server. Da biste to učinili, idite na karticu “ Informacione baze„Kliknite desnim tasterom miša i izaberite Novo - Informaciona baza. Postavite potrebne parametre za povezivanje na PostgreSQL server. Kliknite OK. Pokrenimo 1C: Enterprise. Odlučujemo da dodamo postojeću bazu podataka na server.
Zatim postavite parametre veze. Kliknite “Dalje” i na kraju “Završi”.
Operacija kreiranja baze podataka može se izvršiti direktno iz 1C: Enterprise. Da biste to učinili, pri pokretanju odaberite „Kreiraj novi baza informacija».

Za povezivanje 1C klijenata sa serverom izvana i upravljanje serverom baze podataka na firewall-u, sljedeći portovi moraju biti otvoreni:

Server agent ( regent) - tcp:1540 Glavni menadžer klastera ( rmngr) - tcp:1541 Raspon mrežnih portova za dinamičku distribuciju radnih procesa - tcp:1560-1591, tcp:5432 - Postgresql. Kreirajmo pravilo preko standardnog interfejsa ili pomoću naredbe:

netsh advfirewall firewall add rule name="1Cv8-Server" dir=in action=allow protocol=TCP localport=1540,1541,5432,1560-1590 enable=yes profile=BILO KOJI udaljeniip=BILO KOJI interfejstype=LAN

Sada možemo lako pokrenuti 1C:Enterprise klijent sa drugog računara i dodati postojeću bazu podataka newdb. Ne zaboravite na licence i softversku/hardversku zaštitu. Sada možemo preuzeti Gilev test i izmjeriti performanse našeg sistema.

Na VirtualBox-u sa 1 GB memorije, Dual-Core 2,6 GHz, 319-izdanje 1c, Gilev test daje 11,42 poena, otprilike isto kao i na CentOS-u. Na 16.362 ima nešto više od 11.60 bodova. Optimizacija postavki pomoću čarobnjaka za podešavanje EnterpriseDB nije dala primjetan porast (11.66 i 11.62), iako bi generalno moglo biti korisno. :)

3. Rutinski rad na PostgreSQL serveru.

Backup.

Pokrenite pgAdmin III uslužni program za administraciju i kliknite desnim tasterom miša na željenu bazu podataka. Odaberite "Backup".
Odaberite format (Prilagođeni (nivo kompresije od 0 do 9), Tar, Simple, Catalog). Što se tiče nivoa kompresije, "prilagođeni format" bilo kojeg nivoa kompresije najbolje se kompresuje, zatim "direktorij", zatim "jednostavan" i na kraju "tar". Navodimo kodiranje UTF8, ime uloge je postgresql. Sve dodatne opcije ostavljamo kao zadane. Kliknite na dugme “Backup”. Polje „Poruke“ prikazuje listu svih izvršenih operacija sa šifrom završetka. Ako je 0, onda uspjeh. Ovdje također možete vidjeti kako pokrenuti sličnu operaciju iz komandne linije.

F)\pgAdmin III\1.16\pg_dump.exe" --host 192.168.1.200 --port 5432 --korisničko ime "postgres" --uloga "postgres" --bez lozinke --prilagođeni format --blobs --compress 9 --kodiranje UTF8 --opširno --datoteka "G:\Backups\gilev_dump.backup" "newdb"

Shodno tome, automatska skripta Rezervna kopija, koji dodamo u planer može izgledati otprilike ovako:

"C:\Program Files (x86)\pgAdmin III\1.16\pg_dump.exe" --host 192.168.1.200 --port 5432 --korisničko ime "postgres" --uloga "postgres" --bez lozinke --prilagođeni format --blobs --komprimirati 9 --kodiranje UTF8 --opširno --datoteka "G:\Backups\gilev_dump_%date:~0.2%_%date:~3.2%_%date:~6.4% .backup" "newdb"

Oporavak.

Za vraćanje, odaberite bazu podataka iz koje želimo vratiti podatke rezervna kopija, po mogućnosti prazan. Kliknite desnim tasterom miša i izaberite „Oporavak“. Postavite datoteku sigurnosne kopije, naziv uloge: postgres, kliknite na "Vrati"
Koristeći komandnu liniju:

"C:\Program Files (x86)\pgAdmin III\1.16\pg_restore.exe" --host 192.168.1.200 --port 5432 --korisničko ime "postgres" --dbname "testdb" --uloga "postgres" --ne -password --verbose "G:\Backups\gilev_dump_26_09_2012.backup"

gdje je testdb prazna baza podataka u koju se vraća backup arhiva.

Operacije održavanja:

Komanda VAKUUM:

Sekvencionalno čisti sve tabele trenutno povezane baze podataka, briše privremene podatke i oslobađa prostor na disku. Najčešće se naredba VACUUM izvršava upravo kako bi se dobila maksimalna količina slobodnog prostora na disku i povećala brzina pristupa podacima.

VACUUM— označava prostor koji zauzimaju stare verzije zapisa kao slobodan. Upotreba ove varijante naredbe, po pravilu, ne smanjuje veličinu datoteke koja sadrži tabelu, ali vam omogućava da spriječite njen nekontrolirani rast, popravljajući je na nekom prihvatljivom nivou. Kada se pokreće VACUUM, moguć je paralelni pristup tabeli koja se obrađuje. Ima ih nekoliko dodatne opcije koristeći VAKUUM: VAKUUM PUNI, VAKUUM ZAMRZAVANJE, VAKUUM ANALIZA.

VACUUM FULL pokušava ukloniti sve stare verzije zapisa i, shodno tome, smanjiti veličinu datoteke koja sadrži tabelu. Ova opcija naredbe potpuno zaključava tablicu koja se obrađuje.

VAKUUMSKO ZAMRZAVANJE - Ako VACUUM FULL uklanja “smeće” iz tabela i pomera zapise tako da se tabele nalaze kompaktno na disku i sastoje se od najmanjeg broja fragmenata, dok kompresija traje dugo i blokira zapise, tada VACUUM FREEZE jednostavno uklanja “smeće” sa tabele, ali se sami zapisi ne pomeraju, pa je brži i ne blokira upisivanje. Trenutno je ova opcija zamijenjena autovakuumom - automatskim odvozom smeća postgresql.conf plus nekoliko dodatnih opcija koje proširuju funkcionalnost:

autovacuum=on# Omogućava automatsko prikupljanje smeća.
log_autovacuum_min_duration = -1# Postavljanje na nulu evidentira sve akcije automatskog usisavanja. Minus jedan (podrazumevano) zabranjuje izlaz u dnevnik. Na primjer, ako postavite vrijednost
jednako 250 ms, tada će se zabilježiti sve akcije automatskog usisavanja i analize koje rade 250 ms ili više. Omogućavanje ove postavke može biti korisno za praćenje automatskog vakuuma.
Ova opcija se može postaviti samo u postgresql.conf datoteci ili u komandna linija server.
autovacuum_naptime = 10 min# Vrijeme u sekundama nakon kojeg se provjerava potreba za prikupljanjem smeća u bazi podataka. Standardno se to dešava jednom u minuti.
autovacuum_vacuum_threshold= 1800 # Prag za broj izbrisanih i izmijenjenih zapisa u bilo kojoj tabeli, nakon prekoračenja kojeg dolazi do sakupljanja smeća (VAKUUM).
autovacuum_analyze_threshold= 900 # Prag za broj umetnutih, obrisanih i izmijenjenih zapisa u bilo kojoj tabeli, nakon prekoračenja kojeg se pokreće proces analize (ANALIZA).
autovacuum_vacuum_scale_factor= 0.2 # Procenat izmenjenih i izbrisanih zapisa u odnosu na tabelu iznad koje se pokreće sakupljanje smeća.
autovacuum_analyze_scale_factor= 0.1 # Isto kao i prethodna varijabla, ali u odnosu na analizu.
VACUUM ANALYZE— Ako baza podataka ima tabele u kojima se podaci ne menjaju ili brišu, već samo dodaju, onda za takve tabele možete koristiti posebnu naredbu ANALIZA. Također je vrijedno koristiti ovu naredbu za zasebnu tabelu nakon što joj dodate veliki broj zapisa.

ANALYZE komanda:

Služi za ažuriranje informacija o distribuciji podataka u tabeli. Ove informacije koristi optimizator za odabir najbržeg plana izvršenja upita. Obično se naredba koristi zajedno sa VACUUM ANALYZE.

REINDEX naredba (reindeksiranje):

Koristi se za ponovnu izgradnju postojećih indeksa. Ima smisla koristiti ga u slučaju

— oštećenje indeksa;

- stalno povećanje njegove veličine.

Drugi slučaj zahteva neko objašnjenje. Indeks, poput tabele, sadrži blokove sa starim verzijama zapisa. PostgreSQL ne može uvijek ponovo koristiti ove blokove, pa stoga indeksna datoteka postepeno raste. Ako se podaci u tabeli često mijenjaju, oni mogu rasti prilično brzo. Ako primijetite ovakvo ponašanje indeksa, trebali biste ga konfigurirati da povremeno izvodi naredbu REINDEX. Imajte na umu: naredba REINDEX, poput VACUUM FULL, potpuno zaključava tablicu, tako da se mora izvršiti kada je opterećenje servera minimalno.

Pitanje koji je DBMS - Postgresql ili MS SQL za 1C najoptimalniji - bilo je tema mnogih članaka. U ovom članku ćemo pogledati korake optimizacije za oba. DBMS svakog dobavljača ima i vlastite preporuke za konfiguraciju i preporuke od 1C. Treba napomenuti da se u zavisnosti od opreme, konfiguracije servera i broja korisnika koji postavljaju različita opterećenja, detalji procesa optimizacije DBMS-a za 1C i preporuke za implementaciju mogu promijeniti.

Postavljanje PostgreSQL-a za 1C

Iskustvo u radu 1C baza podataka na PostgreSQL-u pokazalo je da su najveće performanse i optimalne performanse 1C i PostgreSQL-a postignute na Linux-u, pa je preporučljivo koristiti ga. Ali bez obzira na operativni sistem, važno je zapamtiti da su podrazumevane postavke navedene prilikom instalacije PostgreSQL-a namenjene samo za pokretanje DBMS servera. Ni o kakvoj industrijskoj eksploataciji ne može biti govora! Sljedeći korak nakon pokretanja bit će optimizacija PostgreSQL-a za 1C:

  • Prvo, onemogućavamo uštedu energije (inače se kašnjenja u odgovorima iz baze podataka mogu nepredvidivo povećati) i zabranjujemo zamjenu zajedničke memorije.
  • Konfiguriramo osnovne parametre DBMS servera (preporuke za konfiguraciju su opisane dovoljno detaljno, kako na službenoj web stranici dobavljača tako i od strane 1C, pa ćemo se fokusirati samo na najvažnije).
  • Standardne preporuke kompanije 1C predlažu onemogućavanje HyperThreading mehanizama. Ali testiranje Postgres-Pro na serverima sa omogućenim SMT (simultaneous multi threading) pokazalo je drugačije rezultate.
Podešavanje shared_buffers na RAM/4 je podrazumevana preporuka, ali primer Sql servera sugeriše da što mu je više memorije dodeljeno, to su bolje njegove performanse (sa onemogućenim ispiranjem stranica). Odnosno, što se više stranica sa podacima nalazi u RAM-u, to je manje pristupa disku. Postavlja se pitanje zašto tako mali keš? Odgovor je jednostavan: ako je shared_buffers velik, onda se neke od neiskorištenih stranica zamjenjuju na disk. Ali kako pratiti trenutak kada se resetiranje zaustavlja i indikator parametara je optimalan? Da bi se postigao i dostigao optimalni shared_buffers indikator, njegova vrijednost se mora povećavati u produkciji svakodnevno (ako je moguće) sa određenim inkrementom i gledati u kojem trenutku će stranice početi da se ispuštaju na disk (swap će se povećati).
  • Osim toga, na "veliki parametar" negativno utječe rad s mnogo malih stranica, koje po defaultu imaju veličinu od 8Kb. Rad s njima povećava režijske troškove. Šta se može učiniti s ovim da se optimizira za 1C? PostgreSQL 9.4 uveo je parametar huge_pages, koji se može omogućiti, ali samo na Linuxu. Podrazumevano, velike stranice su uključene sa podrazumevanom veličinom od 2048 kB. Dodatno, podrška za ove stranice mora biti omogućena u OS-u. Stoga, optimizacijom strukture skladištenja, možete postići veći indikator shared_buffers.
  • work_mem = RAM/32..64 ili 32MB..128MB Postavlja količinu memorije za svaku sesiju koja će se koristiti za interno sortiranje, spajanje, itd. operacije prije korištenja privremenih datoteka. Ako se ovaj volumen prekorači, server će koristiti privremene datoteke na disku, što može značajno smanjiti brzinu obrade zahtjeva. Ovaj parametar se koristi kada se izvršavaju operatori: ORDER BY, DISTINCT, spajanje spajanja itd.
  • Izračunajte dodatno ovaj parametar može se uraditi na sljedeći način: (Shared memory shared_buffers - memorija za druge programe) / broj aktivnih veza. Ova vrijednost se može smanjiti praćenjem broja kreiranih privremenih datoteka. Takve statistike o veličini i broju privremenih datoteka mogu se dobiti iz sistemskog prikaza pg_stat_database.
  • efektivna_cache_size = RAM - shared_buffers Glavna svrha ovog parametra je da kaže optimizatoru upita koji metod preuzimanja podataka da odabere: potpuno skeniranje ili skeniranje indeksa. Što je veća vrijednost parametra, veća je vjerovatnoća korištenja indeksnog skeniranja. U tom slučaju server ne vodi računa o tome da podaci mogu ostati u memoriji prilikom izvršavanja zahtjeva, a sljedeći zahtjev ih ne mora preuzimati s diska.
  • Instalacija PostgreSQL-a

    Instalacija 1C na PostgreSQL pod Windowsom je prilično jednostavan proces. Kada pokrećete instalacioni paket, morate navesti UTF-8 kodiranje. Zapravo, ovo je jedina zanimljiva nijansa i nije potrebna daljnja konfiguracija PostgreSQL-a za 1C 8.3 iz Windowsa. Instaliranje i konfiguriranje PostgreSQL-a za 1C na Linux OS-u može uzrokovati brojne poteškoće. Da bismo ih prevazišli, kao primjer, razmotrimo pokretanje (koristeći distribucijske komplete od vodećeg ruskog dobavljača PostgreSQL-Pro i kompanije 1C) PostgreSQL na Ubuntu 16.04 x64 serveru

    Instalacija 1C distributivnih kompleta za PostgreSQL DBMS

    1.Preuzmite navedenu poziciju PostgreSQL DBMS distributivnog kompleta:

    2. Učitajte PostgreSQL na server;

    3. Možete raspakirati PostgreSQL DBMS instalater pomoću naredbe:

    tar -xvf postgresql-9.4.2-1.1C_amd64_deb.tar.bz2

    4. Prije instaliranja PostgreSQL DBMS kompleta za distribuciju, provjerimo prisutnost traženog lokala u sistemu (podrazumevano ru_RU.UTF-8):


    5. Ako je sistem sa kojim će PostgreSQL raditi instaliran na jeziku koji nije ruski, potrebno je da kreirate nove lokacije:

    locale-gen ru_RU update-locale LANG=ru_RU.UTF8 dpkg-reconfigure locales

    6. Ako je traženi lokal i dalje dostupan, instalirajte ga prema zadanim postavkama:

    locale –a nano /etc/default/locale Zamijenite sadržaj sa LANG=ru_RU.UTF-8

    7. Nakon ponovnog pokretanja, instalirajte potrebne pakete za našu verziju PostgreSQL-a:

    apt-get install libxslt1.1 ssl-cert

    8.PostgreSQL verzija paketa 9.4.2-1.1C je povezana sa libicu verzijom paketa libicu48. Potrebna verzija više nije u spremištu, ali je možete preuzeti;

    9.Preuzmite i stavite u direktorij gdje se pohranjuju preuzeti fajlovi za PostgreSQL;

    10. Odlaskom u direktorij sa PostgreSQL datotekama, vršimo instalaciju uzastopno upisivanjem sljedećih naredbi:

    CD<Путь к папке с файлами>dpkg -i libicu48_4.8.1.1-3ubuntu0.6_amd64.deb dpkg -i libpq5_9.4.2-1.1C_amd64.deb dpkg -i postgresql-client-common_154.1.1C_all.kgmon.deb1.dpg.dpkg pkg -i postgresql-client-9.4_9.4.2-1.1C_amd64.deb dpkg -i postgresql-9.4_9.4.2-1.1C_amd64.deb dpkg -i postgresql-contrib-9.4_9.4.2-1.4Cb_am

    11.Gotovo. PostgreSQL DBMS distributivni komplet je instaliran.

    Instaliranje PostgreSQL-Pro distribucija

    Da biste instalirali server, morate pokrenuti sljedeće komande uzastopce:

    sudo sh -c "echo "deb http:// 1c.postgrespro.ru/deb/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/postgrespro-1c.list" wget --quiet -O - ​​http:// 1c.postgrespro.ru/keys/GPG-KEY-POSTGRESPRO-1C-92 | sudo apt-key add - && sudo apt-get update sudo apt-get install postgresql-pro-1c-9.4

    Da biste pristupili serveru, uredite parametre u datoteci pg_hba.conf

    cd<Путь до каталога pg_hba.conf>cp pg_hba.conf pg_hba.conf.old bash -c "echo "local all postgres trust" > pg_hba.conf" bash -c "echo "host all all all all md5" >> pg_hba.conf"

    Sam fajl ima sledeću strukturu:


    Fajl je dobro dokumentovan, ali engleski jezik. Pogledajmo ukratko glavne parametre:

    • Lokalno lokalna veza samo preko unixa
    • Domaćin TCP/IP veza
    • Hostsslšifrovana SSL konekcija preko TCP/IP (server mora biti izgrađen sa SSL podrškom, mora se postaviti i ssl parametar)
    • Hostnossl nešifrovana veza preko TCP/IP
    • povjerenje priznati bez autentifikacije
    • odbiti odbiti bez autentifikacije
    • lozinka zahtjev za lozinkom za jasan tekst
    • md5 zahtjev za lozinku u MD5 formi
    • ldap provjera korisničkog imena i lozinke pomoću LDAP servera
    • radijus Provjera korisničkog imena i lozinke pomoću RADIUS servera
    • pam provjera korisničkog imena i lozinke korištenjem plugin servisa

    Detaljnije i detaljnije informacije možete pronaći u dokumentaciji za PostgreSQL proizvod.

    root@NODE2:/home/asd# service --status-all |grep postgres [ - ] postgresql root@NODE2:/home/asd# service postgresql start root@NODE2:/home/asd# service --status-all | grep postgres [ + ] postgresql

    Nakon završetka osnovne instalacije potrebno je konfigurirati konfiguracijski fajl server postgresql.conf, prema specifičnostima konfiguracije PostgreSQL, 1C servera i Ubuntu servera.

    Optimizacija 1C za MS SQL Server

    Instaliraj Najnovija ažuriranja za SQL Sever.

    Operativni sistem rezerviše prostor i popunjava ga nulama, što traje prilično dugo u sledećim događajima:

    • Kreiranje baze podataka;
    • Dodavanje datoteka podataka, dnevnika transakcija, postojećoj bazi podataka;
    • Povećanje veličine postojeće datoteke (uključujući operacije automatskog rasta);
    • Vraćamo baze podataka ili grupe datoteka.

    Odlucuje se ovaj problem dodavanje uloge (pod kojom server radi) u stavku lokalna politika sigurnost "Izvođenje zadataka održavanja volumena."

    Ako je moguće, potrebno je distribuirati TempDB bazu podataka (posebno se intenzivno koristi u RCSI upravljanom načinu zaključavanja) i dnevnik transakcija na različite diskove.

    Na serveru na kojem radi SQL server, režim uštede energije treba postaviti na "High Performance".

    Fascikla s datotekama baze podataka ne bi trebala biti komprimirana.

    Na kartici "Memorija" za server postavljamo minimalni nivo na 50% ukupne memorije. Izračunavamo maksimum koristeći jednu od formula:

    • Maksimalna memorija = Ukupan volumen - veličina prema OS - veličina za 1C (ako postoji, nakon što je prethodno izmjerena memorija koja se koristi sa brojačima) ili
    • Maksimalna memorija = Ukupna veličina – (1024* Ukupna veličina/16384).

    Ograničavamo DOP parametar “Maksimalni stupanj paralelizma” i postavljamo ga na “1”.

    Statistiku ažuriramo prema rasporedu. Počevši od SQL Server 2008, ažuriranje statistike uzrokuje ponovno kompajliranje upita i, shodno tome, briše proceduralni keš, tako da nema potrebe za izvođenjem posebne procedure za brisanje proceduralne keš memorije.

    Povremeno ponovo indeksiramo tabelu i defragmentiramo indekse.

    Uspostavljamo ispravnu politiku rezervacija. Ako ne morate da se oporavite do posljednje tačke u vremenu prije pada sistema, a posljednjih 5 minuta ili više nisu kritični za vaše poslovanje, postavite model oporavka na „Jednostavno“. Ovo će značajno ubrzati vašu brzinu snimanja. Glavna stvar je da se diferencirana sigurnosna kopija može završiti u određenom vremenu.

    Postižemo poboljšanja u radu sa TempDB tokom I/O kreiranjem dodatnih datoteka sa podacima. Ako postoji manje od 8 logičkih procesora, preporučuje se da kreirate datoteku podataka za svaki logički procesor. Ako postoji više od 8 logičkih procesora, preporučuje se kreiranje 8 datoteka sa podacima i, povećavajući za jedan na više od 4, obavezno procijeniti opterećenje TempDB-a.

    1. nov 2012. Prednosti korištenja slobodno distribuiranih softver očigledno. Nažalost, i nedostaci su očigledni - nema službene podrške, dokumentacija je često kontradiktorna, nepotpuna i razbacana po cijelom različitih izvora. Ovaj članak će vam pomoći da shvatite proces instaliranja PosgreSQL-a za 1C:Enterprise 8, izbjegavajući zamke koje nisu opisane u službenoj dokumentaciji.

    Potrebne komponente za instalaciju

    PostgreSQL DBMS se distribuira besplatno i uključen je u paket isporuke 1C aplikacijskog servera. Aplikacijski server 1C:Enterprise 8 dolazi u dvije verzije: 32-bitna i 64-bitna. Postgre može podnijeti i jedno i drugo.

    Dakle, imamo pri ruci komplete za distribuciju:

    • Postgre: postgresql-9_1_2-1_1Cx64.zip, ljubazno dostavljen od 1C.
    • Distribucija servera aplikacija 1C:Enterprise za Windows x64, verzija 8.2.16.368.

    Čini se da ne može biti jednostavnije - samo pokrenite i instalirajte. Lako! Ali instalacija u standardnom načinu rada će dati jedno malo ograničenje: klaster će se nalaziti u mapi "Programske datoteke". Neće se svima svidjeti. Razmotrimo dvije opcije instalacije, jednostavnu i naprednu.

    Članak je podijeljen u 5 dijelova:

    1) Instalacija 1C servera.

    2) Instalirajte PostgreSQL u standardnom obliku, dovoljnom za pokretanje 1C bez dodatnih postavki.

    3) Instalirajte PostgreSQL i izaberite fasciklu za skladištenje klastera.

    4) Kreiranje nove 1C informacione baze.

    5) Određivanje foldera za čuvanje datoteka baze podataka na DBMS serveru.

    Obavezno pročitajte cijeli članak prije instalacije!

    Instalacija 1C aplikacijskog servera

    Pokrećemo setup.exe iz fascikle sa distribucijom 1C servera.

    Ako instalirate poslužitelj aplikacija ne kao uslugu, morat ćete ga ručno pokrenuti svaki put. Ova opcija je rijetko potrebna. Instaliramo ga kao uslugu i odlučujemo pod kojim korisnikom će se pokrenuti. Iz sigurnosnih razloga, bolje je kreirati zasebnog korisnika USR1CV82 umjesto da dozvolite servisu da radi s punim pravima.

    Nakon instalacije servera aplikacija, sistem će od vas zatražiti da instalirate drajver HASP zaštitnog ključa. Slažemo se:

    Čekamo poruku:

    Ako je poruka drugačija, najvjerovatnije su u sistemu ostali “repovi” od prethodnih instalacija HASP drajvera. Izbrišite ih sve i pokušajte ponovo.

    Gotovo, uspješno smo instalirali server aplikacija 1C:Enterprise 8.

    Instaliranje PostgreSQL-a u standardnom obliku, dovoljnom za pokretanje 1C bez dodatnih postavki

    Pokrenite "postgresql-9.1.2-1.1C(x64).msi"

    Ne morate mijenjati opcije instalacije, 1C će raditi. Dalje.

    Postgre, kao i 1C server, može sam kreirati korisnika pod kojim ćete pokrenuti uslugu. Skrećem vam pažnju na činjenicu da ako naznačite račun sa administratorskim pravima, usluga neće raditi ispravno. Obavezno kreirajte novog korisnika.

    Sljedeći prozor za instalaciju.

    Inicijaliziramo klaster. Ako se naš server baze podataka i 1C aplikacijski server nalaze na različiti računari, a zatim označite okvir "Podržava veze sa bilo kojeg IP-a", inače ga ne diramo. Obavezno navedite UTF8 kodiranje. Kreirajte DBMS superkorisnika. Dalje…

    Za početni rad ne treba nam ništa dodatno, poništite okvir i završite instalaciju.

    Rezultat naših napora je PostgreSQL spreman za korištenje. Ako smo zadovoljni da će se baze podataka nalaziti u Program Files\PostgreSQL\9.1.2-1.1C\data, završavamo tamo, otvaramo baze podataka i uživamo u procesu. Međutim, češće nego ne, baze podataka „leže“ na posebno dizajniranim diskovima, a ne na njima sistemski disk. Da biste konfigurirali lokaciju podataka, pročitajte sljedeći odjeljak prije instalacije.

    Instaliranje Postgre-a uz odabir lokacije za pohranu klastera

    Nastavljamo s instalacijom Postgre-a i izvodimo sve korake dok se od nas ne zatraži da inicijaliziramo klaster:

    Poništite izbor "Inicijaliziraj klaster baze podataka" i kliknite na "Dalje".

    Da, sigurni smo.

    Poništite izbor "Pokreni Stack Builder po izlasku" i dovršite instalaciju.

    1. Potrebno je dati puna prava na folder u koji smo instalirali PostgreSQL, obično je to C:\Program Files\PostgreSQL

    2. Pokrenite cmd kao administrator. Ako ovo uradite u win7, onda ga pokrenite kao administrator.

    3. Kreirajte fasciklu u kojoj će klaster biti pohranjen. Na primjer d:\postgredata.

    md d:\postgredata

    4. Ručno inicijaliziramo klaster, naznačujući putanju gdje će se nalaziti.

    “C:\Program Files\PostgreSQL\9.1.2-1.1C\bin\initdb.exe” -D d:\postgredata --locale=Russian_Russia --encoding=UTF8 -U postgres

    5. Uklonite PostgreSQL servis koji je instaliran tokom instalacije.

    sc delete pgsql-9.1.2-1.1C-x64

    Gdje je pgsql-9.1.2-1.1C-x64 naziv usluge. Ako ne znate tačno ime, možete pogledati svojstva usluge "PostgreSQL Database Server..." (Start - Kontrolna tabla - Administrativni alati - Usluge)

    6. Kreirajte nova usluga ukazujući na naš klaster

    “C:\Program Files\PostgreSQL\9.1.2-1.1C\bin\pg_ctl” registar -N pgsql -U postgresql -P lozinka -D d:/postgredata

    7. A sada idemo na usluge. Start – Kontrolna tabla – Administracija – Usluge i pokrenite našu uslugu.

    Kreiranje nove 1C baze podataka na serveru sa PostgreSQL

    Postoji nekoliko opcija za kreiranje baze podataka. Možete pokušati kreirati bazu podataka putem pgAdmin3, administrativne konzole 1C servera. Ali ovdje ćete se suočiti s puno nerazumljivih pitanja i gomilom grešaka, odgovore na koje ćete dugo tražiti. Prepustite to stručnjacima. Naš cilj je da uz minimalan napor dobijemo radnu bazu. Hajde da opišemo najlakši način da to postignemo.

    Pokrećemo 1C klijent.

    Kliknite na "Dodaj...".

    Smišljamo ime za bazu podataka, zatim naznačimo "Na serveru 1C: Enterprise".

    Klaster servera 1C: Enterprise– localhost, ako kreiramo bazu podataka na istom računaru na kojem je instaliran 1C server, ili naziv servera 1C aplikacija, ako je na drugom.

    Naziv infobaze u klasteru- ubuduće će ovo ime biti naznačeno prilikom povezivanja sa drugih računara.

    DBMS tip– Odaberite PostgreSQL.

    Server baze podataka- naznačite ime PostgreSQL servera. Ako kreiramo bazu podataka na serveru, također navodimo localhost.

    Ime baze podataka– sa ovim imenom kreiraće se baza podataka u PostgreSQL-u.

    Korisnik, lozinka– ime korisnika kojeg smo naveli kao superkorisnika prilikom instalacije PostgreSQL-a. Obavezno označite potvrdni okvir “Kreiraj bazu podataka ako ne postoji”.

    Postavlja se pitanje - gdje će se fizički skladištiti baza podataka? U osnovnoj fascikli navedenog klastera. Šta ako ne želimo da leži tamo gdje su sve baze? Tu još ništa ne možemo učiniti, samo ćemo napraviti bazu i krenuti dalje. Dalje…

    Određivanje foldera za pohranu baze podataka

    Dakle, stvorili smo bazu. U većini slučajeva, tu se instalacija završava. Međutim, ako postoji mnogo baza podataka, a postoji nekoliko nizova diskova za različite grupe baza podataka, morate naznačiti gdje bi se baze podataka trebale fizički nalaziti. Da biste to uradili, pokrenite pgAdmin3 sa Start - Programi - PostgreSQL. Povežite se na naš server.

    Kada se prvi put povežete, Postgre će tražiti lozinku za korisnika postgresa (koju smo kreirali tokom instalacije).

    Kreiramo novi TableSpace, to će biti mapa u kojoj će biti pohranjene naše baze podataka.

    Navedeno mjesto pohrane za datoteke baze podataka. UREDU.

    Sada otvaramo svojstva prethodno kreirane baze podataka čiju lokaciju želimo promijeniti.

    Promijenite svojstvo Tablespace. Nakon što kliknete na "OK", datoteke baze podataka će se automatski premjestiti. Spremni! Nadamo se da vam je članak bio koristan. Ako jeste, ostavite komentare i podijelite linkove do ove stranice. Hvala ti!