Hi Josh,

I just tried using pgpool to pool the connections, and ran:

ab -n 1000 -c 50 http://wstg.int/portal/news/

I ran some previous queries to get pgpool to pre-establish all the
connections, and ab ran for a few minutes (with one query per page, eek!).
It was still exhibiting the same problems as before.  While so many new
connections at once can surely make the problem worse (and pgpool will
surely help there), shouldn't this prove that it's not the only issue?

We're running FreeBSD 5.2.1

I've attached open locks, running queries, query plans, top output and
vmstat 5 output for while ab was running, from start to finish.

Any ideas?

Jason


> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:pgsql-performance-
> [EMAIL PROTECTED] On Behalf Of Josh Berkus
> Sent: Thursday, September 23, 2004 8:06 PM
> To: Jason Coene; [EMAIL PROTECTED]
> Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED]; [EMAIL PROTECTED]
> Subject: Re: [PERFORM] Caching of Queries
> 
> Jason,
> 
> > Sorry, I meant 30,000 with 300 connections - not 3,000.  The 300
> > connections
> > / second is realistic, if not underestimated.  As is the nature of
> > our site
> > (realtime information about online gaming), there's a huge fan base
> > and as a
> > big upset happens, we'll do 50,000 page views in a span of 3-5
> > minutes.
> 
> First, your posts show no evidences of the CS storm bug.
> 
> Second, 300 *new* connections a second is a lot.   Each new connection
> requires a significant amount of both database and OS overhead.   This
> is why all the other web developers use a connection pool.
> 
> In fact, I wouldn't be surprised if your lockups are on the OS level,
> even; I don't recall that you cited what OS you're using, but I can
> imagine locking up Linux 2.4 trying to spawn 300 new processes a
> second.
> 
> --Josh
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 8: explain analyze is your friend
OPEN LOCKS:


gf=#  SELECT r.relname, l."mode", count(*) AS numlocks
   FROM pg_locks l, pg_class r
  WHERE r.oid = l.relation
  GROUP BY r.relname, l."mode"
  ORDER BY count(*) DESC;

 relname                          |      mode       | numlocks
----------------------------------+----------------------------
 threads                          | AccessShareLock |       43
 threads_ix_nuked_lastpost        | AccessShareLock |       35
 threads_ix_nuked_gameid_lastpost | AccessShareLock |        7
 pg_attribute                     | AccessShareLock |        1
 v_locks                          | AccessShareLock |        1
 pg_class                         | AccessShareLock |        1
 usersessions                     | AccessShareLock |        1
 countries                        | AccessShareLock |        1
 users                            | AccessShareLock |        1
 userstats_ix_id                  | AccessShareLock |        1
 pg_statistic_relid_att_index     | AccessShareLock |        1
 pg_attribute_relid_attnum_index  | AccessShareLock |        1
 userstats                        | AccessShareLock |        1
 demos                            | AccessShareLock |        1
 pg_cast_source_target_index      | AccessShareLock |        1
 pg_locks                         | AccessShareLock |        1
 users_ix_id                      | AccessShareLock |        1
 buddies                          | AccessShareLock |        1
 buddies_ix_userid                | AccessShareLock |        1
 pg_cast                          | AccessShareLock |        1
 pg_statistic                     | AccessShareLock |        1
(21 rows)

RUNNING QUERIES (AND HOW LONG FOR):

gf=# SELECT pg_stat_activity.usename, round(date_part('epoch'::text, now() - 
pg_stat_activity.query_start)) AS duration, pg_stat_activity.current_query
   FROM pg_stat_activity
  ORDER BY round(date_part('epoch'::text, now() - pg_stat_activity.query_start)) DESC;

 usename | duration |
                                                               current_query


---------+----------+-----------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------
 gf      |        4 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
AND gameid = 1 ORDER BY nuked DESC, gameid DESC, lastpost DESC LIMIT 8
 gf      |        3 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        3 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        3 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        3 | <IDLE>
 gf      |        3 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        3 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        2 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
AND gameid = 3 ORDER BY nuked DESC, gameid DESC, lastpost DESC LIMIT 8
 gf      |        2 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        2 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        2 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        2 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
AND gameid = 7 ORDER BY nuked DESC, gameid DESC, lastpost DESC LIMIT 8
 gf      |        2 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        2 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        2 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        2 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        2 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        2 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
AND gameid = 2 ORDER BY nuked DESC, gameid DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
AND gameid = 2 ORDER BY nuked DESC, gameid DESC, lastpost DESC LIMIT 8
 gf      |        1 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
AND gameid = 2 ORDER BY nuked DESC, gameid DESC, lastpost DESC LIMIT 8
 gf      |        0 | <IDLE>
 gf      |        0 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        0 | <IDLE>
 gf      |        0 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        0 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        0 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
AND gameid = 2 ORDER BY nuked DESC, gameid DESC, lastpost DESC LIMIT 8
 gf      |        0 | <IDLE>
 gf      |        0 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        0 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        0 | SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 
ORDER BY nuked DESC, lastpost DESC LIMIT 8
 gf      |        0 | <IDLE>
 gf      |        0 | <IDLE>
 gf      |        0 | <IDLE>
(46 rows)

QUERY PLAN:

gf-# SELECT id, gameid, forumid, subject FROM threads WHERE nuked = 0 ORDER BY nuked 
DESC, lastpost DESC LIMIT 8;
                                                                         QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.00..1.99 rows=8 width=39) (actual time=32.174..32.336 rows=8 loops=1)
   ->  Index Scan Backward using threads_ix_nuked_lastpost on threads  
(cost=0.00..16824.36 rows=67511 width=39) (actual time=32.164..32.298 rows=8 loops=1)
         Filter: (nuked = 0)
 Total runtime: 32.446 ms
(4 rows)

VMSTAT 5

d01.int> vmstat 5
 procs      memory      page                    disks     faults      cpu
 r b w     avm    fre  flt  re  pi  po  fr  sr da0 fd0   in   sy  cs us sy id
 2 0 0  211536 691068 2449   0   0   0 1693   1   0   0  724    0 482  5  3 91
 0 0 2  213688 689700 9772   0   0   0 2221   0  32   0  895    0 3376  7  4 89
 0 1 2  212900 690588 12264   0   0   0 3233   0   3   0  997    0 9096  9  7 84
 0 0 0  207552 693696 11579   0   0   0 2749   0  47   0 1030    0 9517  8  7 85
 2 0 0  212688 690580 9031   0   0   0 2150   0   6   0  839    0 3206  6  4 90
 0 0 0  209172 692644 10863   0   0   0 2789   0   8   0  933    0 5356  8  5 87
 1 0 0  213060 690040 12255   0   0   0 3213   0  12   0 1154    0 6508  9  5 86
 0 0 0  207552 693640 12229   0   0   0 2169   0  28   0  861    0 5764  7  6 87
 2 0 0  211632 690812 7772   0   0   0 1963   0   5   0  786    0 2787  5  4 91
 0 0 1  211432 691160 12525   0   0   0 2881   0  15   0 1003    0 4029  8  5 87
 0 0 0  208320 693168 9280   0   0   0 2262   0   2   0  832    0 3390  7  5 89
 5 7 0  231384 679220 15424   0   0   0 2408   0   7   0 1035    0 7909 10  7 83
begin AB
 0 50 5  298548 637676 16323   0   0   0 1123   0   2   0 1341    0 50716 18 14 68
 0 43 6  290120 641824 10121   0   0   0 2464   0   3   0 1254    0 66648 18 16 65
 5 40 1  279568 649060 5221   0   0   0 1790   0  29   0 1273    0 102972 21 23 56
 2 35 11  281128 647952 8595   0   0   0 1894   0  10   0 1461    0 65727 20 15 65
 1 12 14  264744 658852 7410   0   0   0 2058   0   1   0 1347    0 67184 21 16 63
 0 2 5  258092 662808 9405   0   0   0 2667   0   7   0 1543    0 43952 20 12 68
 5 3 0  268944 656192 9765   0   0   0 1905   0   7   0 1479    0 37269 21 10 70
 4 8 3  268076 656292 9561   0   0   0 2223   0   6   0 1485    0 29425 18  8 73
 0 45 3  287296 643892 10656   0   0   0 1914   0  24   0 1542    0 58277 23 13 65
 5 41 0  283708 646428 9064   0   0   0 2218   0  12   0 1447    0 64764 20 15 65
 0 49 4  296012 638116 10023   0   0   0 2314   0   8   0 1397    0 64031 19 17 64
 5 36 3  299804 635440 9287   0   0   0 2048   0   3   0 1177    0 81789 19 20 61
end AB
 0 1 1  260944 660812 13731   0   0   0 3377   0  11   0  999    0 11240  9  8 83
 0 0 0  256324 663836 8794   0   0   0 2318   0   2   0  796    0 3622  6  4 90
 1 0 0  256956 663632 7928   0   0   0 1941   0  37   0  853    0 2717  5  3 91
 0 0 0  256176 664044 9236   0   0   0 2159   0   5   0  847    0 2620  6  4 90
 0 0 3  257784 663008 10665   0   0   0 2521   0   4   0  844    0 4582  7  6 87
 0 0 0  254572 665016 16023   0   0   0 2689   0  10   0 1027    0 9869  8  8 84

TOP:


last pid: 97030;  load averages:  5.33,  2.30,  1.55         up 20+04:55:04  21:15:12
118 processes: 4 running, 110 sleeping, 4 lock
CPU states: 19.4% user,  0.0% nice, 13.2% system,  0.8% interrupt, 66.7% idle
Mem: 86M Active, 1008M Inact, 204M Wired, 59M Cache, 112M Buf, 566M Free
Swap: 4096M Total, 4096M Free

  PID USERNAME PRI NICE   SIZE    RES STATE  C   TIME   WCPU    CPU COMMAND
96626 pgsql     -4    0 96048K 21076K semwai 0   0:02  2.19%  2.05% postgres
96649 pgsql     -4    0 96048K 21076K semwai 3   0:01  2.15%  2.00% postgres
96638 pgsql     -4    0 96048K 21076K semwai 0   0:02  2.09%  1.95% postgres
96627 pgsql      4    0 96048K 21076K sbwait 0   0:02  2.09%  1.95% postgres
96635 pgsql     -4    0 96048K 21076K semwai 0   0:01  1.88%  1.76% postgres
96647 pgsql     -4    0 96048K 21076K semwai 1   0:01  1.88%  1.76% postgres
96652 pgsql     -4    0 96048K 21076K semwai 0   0:02  1.73%  1.61% postgres
96640 pgsql     -4    0 96048K 21144K semwai 3   0:02  1.73%  1.61% postgres
95637 pgsql     -4    0 96240K 31868K semwai 1   0:02  1.61%  1.61% postgres
96637 pgsql     -4    0 96048K 21076K semwai 1   0:01  1.73%  1.61% postgres
96645 pgsql     -4    0 96048K 21076K semwai 0   0:02  1.67%  1.56% postgres
96630 pgsql     -4    0 96048K 21076K semwai 3   0:01  1.67%  1.56% postgres
95549 pgsql     -4    0 96240K 32364K semwai 0   0:02  1.51%  1.51% postgres
96629 pgsql     -4    0 96048K 21076K semwai 0   0:01  1.62%  1.51% postgres
96648 pgsql     -4    0 96048K 21076K semwai 0   0:01  1.62%  1.51% postgres
96661 pgsql     -4    0 96048K 21076K semwai 1   0:01  1.57%  1.46% postgres
96644 pgsql     -4    0 96048K 21076K semwai 3   0:01  1.57%  1.46% postgres
96653 pgsql      4    0 96048K 21076K sbwait 0   0:01  1.47%  1.37% postgres
96651 pgsql     -4    0 96048K 21076K semwai 3   0:02  1.41%  1.32% postgres
96657 pgsql     -4    0 96048K 21076K semwai 0   0:01  1.41%  1.32% postgres
96646 pgsql     -4    0 96048K 21076K semwai 0   0:01  1.36%  1.27% postgres
96643 pgsql     -4    0 96048K 21076K semwai 3   0:01  1.36%  1.27% postgres
96654 pgsql     -4    0 96048K 21076K semwai 3   0:01  1.36%  1.27% postgres
96632 pgsql     -4    0 96048K 21076K semwai 1   0:01  1.30%  1.22% postgres
96659 pgsql     -4    0 96048K 21076K semwai 0   0:01  1.20%  1.12% postgres
96655 pgsql     -4    0 96048K 21076K semwai 1   0:01  1.15%  1.07% postgres
96660 pgsql     -4    0 96048K 21076K semwai 3   0:01  1.10%  1.03% postgres
96636 pgsql     -4    0 96048K 21076K semwai 1   0:01  1.04%  0.98% postgres
96650 pgsql     -4    0 96048K 21076K semwai 0   0:01  1.05%  0.98% postgres
96656 pgsql     -4    0 96048K 21076K semwai 3   0:01  1.05%  0.98% postgres
96658 pgsql     -4    0 96048K 21076K semwai 0   0:01  0.99%  0.93% postgres
96631 pgsql     -4    0 96048K 21076K semwai 0   0:01  0.99%  0.93% postgres
97004 pgsql     -4    0 96356K 41576K semwai 3   0:00  3.50%  0.49% postgres
97009 pgsql     -4    0 97028K 24004K semwai 3   0:00  2.56%  0.24% postgres
---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to