Search Postgresql Archives

Re: performance tuning postgresql 9.5.5.10 [enterprisedb]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Reducing worker mem shaved about 12 minutes off the query time.. Thanks for the suggestion. I lowered it to 10MB instead of 100MB



> On Dec 29, 2016, at 8:07 PM, Charles Clavadetscher <clavadetscher@xxxxxxxxxxxx> wrote:
> 
> Forwarding to list.
> 
> -----Original Message-----
> From: ajmcello [mailto:ajmcello78@xxxxxxxxx] 
> Sent: Freitag, 30. Dezember 2016 07:05
> To: Charles Clavadetscher <clavadetscher@xxxxxxxxxxxx>
> Subject: Re:  performance tuning postgresql 9.5.5.10 [enterprisedb]
> 
> There are no connections except one cli when running the query. After that finishes then I get connection refused  or cannot connect
> to server due to load increasing because of server connections. But I'm more interested in tuning the server for better query
> response time. Is there anything in the configuration that would help?
> 
> Sent from my iPhone
> 
>> On Dec 29, 2016, at 7:35 PM, Charles Clavadetscher <clavadetscher@xxxxxxxxxxxx> wrote:
>> 
>> Hello
>> 
>>> -----Original Message-----
>>> From: pgsql-general-owner@xxxxxxxxxxxxxx [mailto:pgsql-general-owner@xxxxxxxxxxxxxx] On Behalf Of ajmcello
>>> Sent: Freitag, 30. Dezember 2016 05:54
>>> To: POSTGRES <pgsql-general@xxxxxxxxxxxxxx>
>>> Subject:  performance tuning postgresql 9.5.5.10 [enterprisedb]
>>> 
>>> 
>>> I am trying to optimize and tune my server for fastest simple queries with highest connection to server possible.
>>> Basically, a SELECT item from table takes 30 minutes on a machine with SSD drives. The table has 900K entries and 12
>>> columns.  Using that SELECT query, I then have the ability to make about 500 simultaneous connections to the server
>>> before errors start to occur. So, I can live with 500, but the slow query gives me grief.
>> 
>> From previous posts of other users, I assume that in order to get help you will need to provide some more information. Here the
> questions that come to my mind.
>> 
>> What errors do you get from the server when you reach the 500 connections?
>> 
>> How long does it take to run the query without heavy load, e.g. just one user connected?
>> 
>> \timing on
>> query
>> 
>> How does the execution plan look like? There you may see if the index is used at all.
>> 
>> EXPLAIN ANALYZE query;
>> 
>>> I have a GIST index for the table. I tried btree, but according to performance tests, GIST was faster. So I went
>>> with GIST.
>>> 
>>> The system drive and pgsql drive are separate. I can separate them further if need to be. Total ram is 56GB. I added
>>> 32GB of swap.
>>> 
>>> Is there anything I can do to speed up the SELECT statement?
>> 
>> Could you provide the statement and the table definition?
>> 
>>> Here is what I have:
>>> 
>>> [sysctl.conf]
>>> net.ipv4.conf.default.rp_filter=1
>>> net.ipv4.conf.all.rp_filter=1
>>> net.ipv4.tcp_syncookies=1
>>> net.ipv4.ip_forward=1
>>> net.ipv6.conf.all.forwarding=1
>>> net.ipv4.conf.all.accept_redirects=0
>>> net.ipv6.conf.all.accept_redirects=0
>>> net.ipv4.conf.all.accept_source_route=0
>>> net.ipv6.conf.all.accept_source_route=0
>>> net.ipv4.conf.all.log_martians=1
>>> kernel.sysrq=0
>>> kernel.shmmax=2147483999999
>>> kernel.shmall=2097159999999
>>> #32GBkernel.shmmax=17179869184
>>> #32GBkernel.shmall=4194304
>>> kernel.shmmni=999999999
>>> kernel.shmmin=1
>>> kernel.shmseg=10
>>> semmsl, semmns, semopm, semmni kernel.sem=250 32000 100 128
>>> fs.file-max=65536
>>> kern.maxfiles=50000
>>> kern.maxfilesperproc=50000
>>> net.ipv4.ip_local_port_range=1024 65535
>>> net.ipv4.tcp_tw_recycle=1
>>> net.ipv4.tcp_fin_timeout=10
>>> net.ipv4.tcp_tw_reuse=1
>>> net.core.rmem_max=16777216
>>> net.core.wmem_max=16777216
>>> net.ipv4.tcp_max_syn_backlog=4096
>>> net.ipv4.tcp_syncookies=1
>>> kernel.sched_migration_cost_ns=5000000
>>> kernel.sched_migration_cost_ns=5000000
>>> kernel.sched_autogroup_enabled=0
>>> vm.swappiness=10
>>> 
>>> 
>> 
>> Here are some helpful informations on the settings below:
>> https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server
>> 
>> I am not really the big expert, but 100'000 max_connections and work_mem of 100MB seems to me to be a problem:
>> 
>> From the link mentioned right above:
>> 
>> "This size (work_mem) is applied to each and every sort done by each user, and complex queries can use multiple working memory
> sort buffers. Set it to 50MB, and have 30 users submitting queries, and you are soon using 1.5GB of real memory."
>> 
>> This is:
>> SELECT * FROM pg_size_pretty((50.0*(2^20)*30.0)::BIGINT);
>> -[ RECORD 1 ]--+--------
>> pg_size_pretty | 1500 MB
>> 
>> Applied to your settings:
>> 
>> SELECT * FROM pg_size_pretty((100.0*(2^20)*100000.0)::BIGINT);
>> -[ RECORD 1 ]--+--------
>> pg_size_pretty | 9766 GB
>> 
>> This could explain the errors you get from the server. You may be trying to use much more memory than you have.
>> 
>> Regards
>> Charles
>> 
>>> [postgresql.conf]
>>> max_connections = 100000
>>> max_files_per_process = 1000000
>>> shared_buffers = 24GB
>>> max_locks_per_transaction  = 1000
>>> effective_cache_size = 50GB
>>> work_mem = 100MB
>>> maintenance_work_mem = 2GB
>>> log_min_duration_statement = 10000
>>> checkpoint_completion_target = 0.9
>>> wal_buffers = 32MB
>>> default_statistics_target = 100
>>> listen_addresses = '*'
>>> port = 5432
>>> ssl = off
>>> wal_sync_method = fdatasync
>>> synchronous_commit = on
>>> fsync = off
>>> wal_level = minimal
>>> #client_min_messages = fatal
>>> #log_min_messages = fatal
>>> #log_min_error_statement = fatal
>>> datestyle = 'iso, mdy'
>>> debug_pretty_print = off
>>> debug_print_parse = off
>>> debug_print_plan = off
>>> debug_print_rewritten = off
>>> default_text_search_config = 'pg_catalog.english'
>>> enable_bitmapscan = on
>>> enable_hashagg = on
>>> enable_hashjoin = on
>>> enable_indexonlyscan = on
>>> enable_indexscan = on
>>> enable_material = on
>>> enable_mergejoin = on
>>> enable_nestloop = on
>>> enable_seqscan = on
>>> enable_sort = on
>>> enable_tidscan = on
>>> from_collapse_limit = 8
>>> geqo = on
>>> geqo_threshold = 12
>>> log_checkpoints = off
>>> 
>>> log_connections = off
>>> log_disconnections = off
>>> log_duration = off
>>> log_executor_stats = off
>>> log_hostname = off
>>> log_parser_stats = off
>>> log_planner_stats = off
>>> log_replication_commands = off
>>> log_statement_stats = off
>>> log_timezone = 'UTC'
>>> max_wal_size = 1GB
>>> min_wal_size = 80MB
>>> shared_preload_libraries = '$libdir/dbms_pipe,$libdir/edb_gen'
>>> stats_temp_directory = 'pg_stat_tmp'
>>> timezone = 'US/Pacific'
>>> track_activities = on
>>> track_counts = on
>>> track_io_timing = off
>>> 
>>> 
>>> Thanks in advance.
>>> 
>>> 
>>> 
>>> 
>> 
>> 
> 
> 
> 
> -- 
> Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general


-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux