Projekt

Allgemein

Profil

710 Datenbankeinstellungen und Tuning (postgresql conf) » Historie » Revision 65

Revision 64 ([X] Daniel S, 19.03.2019 09:26) → Revision 65/85 ([E] Frank S, 27.03.2019 17:17)

h1. postgresql.conf: Datenbankeinstellungen und Tuning 


 @postgresql.conf@ ([[PostgreSQL Netzwerkkonfiguration (pg_hba.conf)]]) 

 Datei-Pfad: *..\PostgreSQL\9.6\data\pg96\postgresql.conf* 

 h2. Prüfen der wichtigsten Postgreseinstellungen mittels Datenbankfunktion 

 Die Funktionen heißen @TSystem.database_settings__initialize()@ Funktion heist TSystem.database_settings__validate() und @TSystem.database_settings__validate()@ und muss bei Neuerungen entsprechend angepasst oder erweitert werden. 

 

 h2. Konfiguration PostgreSQL (Beachte Betriebssystem) ab Version 9.3  

 Beachte Programm-Start-Prüfung PRODAT: #9933 
 Für ein 16GB RAM System 
 @shared_buffers = 4096MB@ Daumenregel: ca 1/4 Des RAMs den Rest für effective_cache_size 
 @temp_buffers = 8MB@ 
 @work_mem = 32MB@ (nicht zu hoch, da je sort bzw. hash Operation, auch mehrfach bei komplexen queries) 
 @maintenance_work_mem = 512MB@ (für VACUUM, CREATE INDEX, and ALTER TABLE ADD FOREIGN KEY, außerdem für restore dumps) 
 @dynamic_shared_memory_type = windows@ 

 @max_worker_processes = 8@ > Default ist 8 (keine Änderung nötig). Je nach Unternehmensgröße mehr 
 @max_parallel_workers_per_gather = 4@ 

 @fsync = off@ 
 @synchronous_commit = off@ 
 @wal_compression = on@ 
 @wal_buffers = -1@      (bis 9.3 8MB) 
 @max_wal_size = 3GB@       (ab 9.6 Ersatz für checkpoint_segments3 * checkpoint_segments) * 16MB ) 

 @max_locks_per_transaction = 128@ 

 @effective_cache_size = 12288MB@ (Beachte, wenn Server nur für PRODAT dann 3/4 des Arbeitsspeichers, wenn auch andere Programme dort laufen dann 1/2 Arbeitsspeicher. Gibt an wieviel RAM-Cache Postgressql erwarten kann, für Indizies usw) 

 @default_statistics_target = 1000@ 

 @seq_page_cost = 2.0@ (Mache sequentielle Scans "teurer": Der Planer ist eher geneigt, den Index zu nutzen) 
 @cursor_tuple_fraction = 0.75@ (siehe #6436) (Steuert, dass das CURSOR-FETCH (F2-Fenster) anders errechnet wird und es Blöcke früher zurückgibt) 

 @log_destination = 'eventlog'@ (unter Windows) 
 @#log_checkpoints = off    # default off@ (auf Default setzen) 
 @log_line_prefix = '<%u@@@%d-%t> '@ 
 @log_autovacuum_min_duration = 250    # default -1@ (auf Default setzen) > alles was länger 250ms dauert loggen und bei Gelegnheit prüfen 

 @search_path = '"$user",public,TSystem,prodat_languages,Z_99_Deprecated'@ 

 @datestyle = 'iso, dmy'@ 

 @standard_conforming_strings = off@ (siehe #4860) 

 @lc_messages = 'en_US.UTF-8'@ (Das muß sein, da wir die Fehlermeldungen teilweise parsen und somit auf die Fehler-Strings gehen.) 

 @lc_monetary = 'German_Germany.1252'@ (Lokale je nach Land) 
 @lc_numeric = 'German_Germany.1252'@ 
 @lc_time = 'German_Germany.1252'@ 


 {{collapse(Alte Versionen:) 
 @checkpoint_segments = 64 # in 9.6 nicht supported@ 
 @statement_timeout=120000@ Bis Prodat 11.5.3@ 
 }} 

 

 h2. Reload 

 Konfiguration im laufenden Betrieb neu laden. 
 @..\PostgreSQL\pg96\bin\pg_ctl reload -D ..\PostgreSQL\data\pg96@ 


 h2. Linux  

 {{collapse(Linux) 

 h3. Betriebssystem - Speichereinstellungen mind. 3GiB Arbeitsspeicher! 

 * standard: 
 sysctl kernel.shmmax 
 kernel.shmmax = 33554432 

 * umsetzen auf 280437720 (256MB, Mindestens, LOLL steht auf 1024MB (8GB Ram)) (On Windows the useful range is 64MB to 512MB) 
 /etc/sysctl.conf    -> zeile aufnehmen: kernel.shmmax=280437720 
 reboot 

 h3. Nur auf Systemen mit 3GiB+ RAM anzuwenden 

 @$ free -m@ 
 <pre> 
              total         used         free       shared      buffers       cached 
 Mem:            3018         1516         1501            0          208         1113 
 -/+ buffers/cache:          194         2823 
 Swap:           1023            0         1023 
 </pre> 


 h3. Weiteres 

 Unter Linux ist noch die shmmax-Option aus der 99-postgresql.conf via sysctl zu setzen, sonst klappert das da. 
 http://www.postgresql.org/docs/8.2/static/kernel-resources.html 

 }} 


 Könnte durchaus noch weiter getrieben werden, indem man Sie auf die Prodat-DB abstimmt: 
 * http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server 
 * http://www.postgresql.org/docs/current/static/performance-tips.html 
 * "five_steps_perform_2009.pdf":http://www.prodat-sql.de/redmine/attachments/download/2528/five_steps_perform_2009.pdf Dokument über Einstellungen etc 


 *Hinweis:* Fehler im PgAdmin/Server-Status: ungültige Byte-Sequenz für Kodierung "UTF8" ... durch SELECT pg_file_read('pg_log/... kann ignoriert werden, da wir ja ins eventlog schreiben. 
 Die Anzeige vom Log hier einfach schließen. Liegt an LC_MESSAGES und mehrsprachigen Systemen, vermutlich ein Bug, Workaround LC_MESSAGES='C' (evtl. nicht mit Prodat kompatibel) 


 h2. Virtualisierung 

 "Database_Virtualization_PG_China.pdf":http://www.prodat-sql.de/redmine/attachments/download/2568/Database_Virtualization_PG_China.pdf