Hi, We are running some performances tests. With a lot of concurrent access, queries get very slow. When there is no load, those queries run fast.
We kind of see a trend about these queries: it seems like the ones that become very slow have an ORDER BY or MAX in them. Here are our config settings: name | setting | description ---------------------------------+--------------------------+----------- ------------------------------------------------------------------------ -------------------------------------------- add_missing_from | off | Automatically adds missing table references to FROM clauses. allow_system_table_mods | off | Allows modifications of the structure of system tables. archive_command | (disabled) | Sets the shell command that will be called to archive a WAL file. archive_mode | off | Allows archiving of WAL files using archive_command. archive_timeout | 0 | Forces a switch to the next xlog file if a new file has not been started within N seconds. array_nulls | on | Enable input of NULL elements in arrays. authentication_timeout | 1min | Sets the maximum allowed time to complete client authentication. autovacuum | on | Starts the autovacuum subprocess. autovacuum_analyze_scale_factor | 0.1 | Number of tuple inserts, updates or deletes prior to analyze as a fraction of reltuples. autovacuum_analyze_threshold | 250 | Minimum number of tuple inserts, updates or deletes prior to analyze. autovacuum_freeze_max_age | 200000000 | Age at which to autovacuum a table to prevent transaction ID wraparound. autovacuum_max_workers | 3 | Sets the maximum number of simultaneously running autovacuum worker processes. autovacuum_naptime | 5min | Time to sleep between autovacuum runs. autovacuum_vacuum_cost_delay | 20ms | Vacuum cost delay in milliseconds, for autovacuum. autovacuum_vacuum_cost_limit | -1 | Vacuum cost amount available before napping, for autovacuum. autovacuum_vacuum_scale_factor | 0.2 | Number of tuple updates or deletes prior to vacuum as a fraction of reltuples. autovacuum_vacuum_threshold | 500 | Minimum number of tuple updates or deletes prior to vacuum. backslash_quote | safe_encoding | Sets whether "\'" is allowed in string literals. bgwriter_delay | 200ms | Background writer sleep time between rounds. bgwriter_lru_maxpages | 100 | Background writer maximum number of LRU pages to flush per round. bgwriter_lru_multiplier | 2 | Background writer multiplier on average buffers to scan per round. block_size | 8192 | Shows the size of a disk block. bonjour_name | | Sets the Bonjour broadcast service name. check_function_bodies | on | Check function bodies during CREATE FUNCTION. checkpoint_completion_target | 0.5 | Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval. checkpoint_segments | 3 | Sets the maximum distance in log segments between automatic WAL checkpoints. checkpoint_timeout | 5min | Sets the maximum time between automatic WAL checkpoints. checkpoint_warning | 30s | Enables warnings if checkpoint segments are filled more frequently than this. client_encoding | UTF8 | Sets the client's character set encoding. client_min_messages | notice | Sets the message levels that are sent to the client. commit_delay | 250 | Sets the delay in microseconds between transaction commit and flushing WAL to disk. commit_siblings | 10 | Sets the minimum concurrent open transactions before performing commit_delay. constraint_exclusion | off | Enables the planner to use constraints to optimize queries. cpu_index_tuple_cost | 0.005 | Sets the planner's estimate of the cost of processing each index entry during an index scan. cpu_operator_cost | 0.0025 | Sets the planner's estimate of the cost of processing each operator or function call. cpu_tuple_cost | 0.01 | Sets the planner's estimate of the cost of processing each tuple (row). custom_variable_classes | | Sets the list of known custom variable classes. DateStyle | ISO, MDY | Sets the display format for date and time values. db_user_namespace | off | Enables per-database user names. deadlock_timeout | 1s | Sets the time to wait on a lock before checking for deadlock. debug_assertions | off | Turns on various assertion checks. debug_pretty_print | off | Indents parse and plan tree displays. debug_print_parse | off | Prints the parse tree to the server log. debug_print_plan | off | Prints the execution plan to server log. debug_print_rewritten | off | Prints the parse tree after rewriting to server log. default_statistics_target | 10 | Sets the default statistics target. default_tablespace | | Sets the default tablespace to create tables and indexes in. default_text_search_config | pg_catalog.simple | Sets default text search configuration. and the box info: > cat /proc/meminfo MemTotal: 8177116 kB MemFree: 2830212 kB Buffers: 83212 kB Cached: 2385740 kB SwapCached: 32 kB Active: 4037560 kB Inactive: 1082912 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 8177116 kB LowFree: 2830212 kB SwapTotal: 2097112 kB SwapFree: 2096612 kB Dirty: 4548 kB Writeback: 72 kB AnonPages: 2651288 kB Mapped: 311824 kB Slab: 173968 kB PageTables: 20512 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 6185668 kB Committed_AS: 3602784 kB VmallocTotal: 34359738367 kB VmallocUsed: 263672 kB VmallocChunk: 34359474295 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 Hugepagesize: 2048 kB > cat /proc/meminfo MemTotal: 8177116 kB MemFree: 2830212 kB Buffers: 83212 kB Cached: 2385740 kB SwapCached: 32 kB Active: 4037560 kB Inactive: 1082912 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 8177116 kB LowFree: 2830212 kB SwapTotal: 2097112 kB SwapFree: 2096612 kB Dirty: 4548 kB Writeback: 72 kB AnonPages: 2651288 kB Mapped: 311824 kB Slab: 173968 kB PageTables: 20512 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 6185668 kB Committed_AS: 3602784 kB VmallocTotal: 34359738367 kB VmallocUsed: 263672 kB VmallocChunk: 34359474295 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 Hugepagesize: 2048 kB It seems to me that we should try increasing shared_buffers. But do you have any other suggestions? Or do you see anything wrong in our config? Thanks, Anne