Обсуждение: How to improve query performance?
I did up an online survey over the weekend, and its gotten a little on
the...slow side :( Unfortunately, I can see where I can speed it up any,
so I'm asking for any suggestions, if its possible.
Explain on the query I'm using shows:
Sort (cost=5455.34 size=0 width=0)
-> Aggregate (cost=5455.34 size=0 width=0)
-> Group (cost=5455.34 size=0 width=0)
-> Sort (cost=5455.34 size=0 width=0)
-> Seq Scan on op_sys (cost=5455.34 size=39024 width=12)
The Query itself is:
my $OSlisting = "\
select count(sys_type) as tot_sys_type,sys_type \
from op_sys \
where sys_type is not null \
group by sys_type \
order by tot_sys_type desc;";
The table looks like:
Table = op_sys
+----------------------------------+----------------------------------+-------+
| Field | Type | Length|
+----------------------------------+----------------------------------+-------+
| ip_number | text | var |
| sys_type | text | var |
| browser_type | text | var |
| entry_added | datetime | 8 |
| probe | bool | 1 |
+----------------------------------+----------------------------------+-------+
Indices: op_sys_ip
op_sys_type
The table holds ~120k records right now, and the above query returns ~1100.
To get a feel for the speed it returns, see http://www.hub.org/OS_Survey
I can't think of any way to improve the speed, and yes, I do a 'vacuum
analyze' on it periodically (did one just before the above EXPLAIN)...
Other other note...its a v6.4.2 server, running on a PII with 384Meg of
RAM and FreeBSD 3.0-STABLE...
Marc G. Fournier
Systems Administrator @ hub.org
primary: scrappy@hub.org secondary: scrappy@{freebsd|postgresql}.org
The Hermit Hacker wrote: > > The table holds ~120k records right now, and the above query returns ~1100. > > To get a feel for the speed it returns, see http://www.hub.org/OS_Survey > > I can't think of any way to improve the speed, and yes, I do a 'vacuum > analyze' on it periodically (did one just before the above EXPLAIN)... > > Other other note...its a v6.4.2 server, running on a PII with 384Meg of > RAM and FreeBSD 3.0-STABLE... What is -S (memory for sorting)? Try to use -S 8192 or -S 16384. Vadim
On Tue, 16 Feb 1999, The Hermit Hacker wrote:
Wouldn't it be faster if you didn't do all those text fields?
It'd certainly be smaller. OS could be an integer, along with browser.
Also, there's a type in Postgres for IP address, might as well use it. :)
One thing that you could do to speed it up a *LOT* is to build a
statistics table, and load it all up in that ahead of time, and have a
trigger to keep the other table up-to-date while you're updating.
// I did up an online survey over the weekend, and its gotten a little on
// the...slow side :( Unfortunately, I can see where I can speed it up any,
// so I'm asking for any suggestions, if its possible.
//
// Explain on the query I'm using shows:
//
// Sort (cost=5455.34 size=0 width=0)
// -> Aggregate (cost=5455.34 size=0 width=0)
// -> Group (cost=5455.34 size=0 width=0)
// -> Sort (cost=5455.34 size=0 width=0)
// -> Seq Scan on op_sys (cost=5455.34 size=39024 width=12)
//
// The Query itself is:
//
// my $OSlisting = "\
// select count(sys_type) as tot_sys_type,sys_type \
// from op_sys \
// where sys_type is not null \
// group by sys_type \
// order by tot_sys_type desc;";
//
// The table looks like:
//
// Table = op_sys
// +----------------------------------+----------------------------------+-------+
// | Field | Type | Length|
// +----------------------------------+----------------------------------+-------+
// | ip_number | text | var |
// | sys_type | text | var |
// | browser_type | text | var |
// | entry_added | datetime | 8 |
// | probe | bool | 1 |
// +----------------------------------+----------------------------------+-------+
// Indices: op_sys_ip
// op_sys_type
//
// The table holds ~120k records right now, and the above query returns ~1100.
//
// To get a feel for the speed it returns, see http://www.hub.org/OS_Survey
//
// I can't think of any way to improve the speed, and yes, I do a 'vacuum
// analyze' on it periodically (did one just before the above EXPLAIN)...
//
// Other other note...its a v6.4.2 server, running on a PII with 384Meg of
// RAM and FreeBSD 3.0-STABLE...
//
//
// Marc G. Fournier
// Systems Administrator @ hub.org
// primary: scrappy@hub.org secondary: scrappy@{freebsd|postgresql}.org
//
//
//
--
Principal Member Technical Staff, beyond.com The world is watching America,
pub 1024/3CAE01D5 1994/11/03 Dustin Sallings <dustin@spy.net>
| Key fingerprint = 87 02 57 08 02 D0 DA D6 C8 0F 3E 65 51 98 D8 BE
L______________________________________________ and America is watching TV. __
On Tue, 16 Feb 1999, Vadim Mikheev wrote: > The Hermit Hacker wrote: > > > > The table holds ~120k records right now, and the above query returns ~1100. > > > > To get a feel for the speed it returns, see http://www.hub.org/OS_Survey > > > > I can't think of any way to improve the speed, and yes, I do a 'vacuum > > analyze' on it periodically (did one just before the above EXPLAIN)... > > > > Other other note...its a v6.4.2 server, running on a PII with 384Meg of > > RAM and FreeBSD 3.0-STABLE... > > What is -S (memory for sorting)? Try to use -S 8192 or -S 16384. Not sure if/how much that improved it, since I didn't time previously, but down to ~1 minute...still a long time, but...should tied me over... Thanks... Marc G. Fournier Systems Administrator @ hub.org primary: scrappy@hub.org secondary: scrappy@{freebsd|postgresql}.org
On Mon, 15 Feb 1999, dustin sallings wrote:
> On Tue, 16 Feb 1999, The Hermit Hacker wrote:
>
> Wouldn't it be faster if you didn't do all those text fields?
> It'd certainly be smaller. OS could be an integer, along with browser.
> Also, there's a type in Postgres for IP address, might as well use it. :)
Not sure how any of this would make things faster...I'd almost
think that the extra joins required to map # to name would increase
things...
> One thing that you could do to speed it up a *LOT* is to build a
> statistics table, and load it all up in that ahead of time, and have a
> trigger to keep the other table up-to-date while you're updating.
Thought of this one, but must be missing something in my 'insert
into...select from' statement (see -hackers)...I'm going to have to look
into re-structuring it, and see if I can improve speeds more...getting rid
of the 'text' fields should help things someone, just not sure by how
much...
> // I did up an online survey over the weekend, and its gotten a little on
> // the...slow side :( Unfortunately, I can see where I can speed it up any,
> // so I'm asking for any suggestions, if its possible.
> //
> // Explain on the query I'm using shows:
> //
> // Sort (cost=5455.34 size=0 width=0)
> // -> Aggregate (cost=5455.34 size=0 width=0)
> // -> Group (cost=5455.34 size=0 width=0)
> // -> Sort (cost=5455.34 size=0 width=0)
> // -> Seq Scan on op_sys (cost=5455.34 size=39024 width=12)
> //
> // The Query itself is:
> //
> // my $OSlisting = "\
> // select count(sys_type) as tot_sys_type,sys_type \
> // from op_sys \
> // where sys_type is not null \
> // group by sys_type \
> // order by tot_sys_type desc;";
> //
> // The table looks like:
> //
> // Table = op_sys
> // +----------------------------------+----------------------------------+-------+
> // | Field | Type | Length|
> // +----------------------------------+----------------------------------+-------+
> // | ip_number | text | var |
> // | sys_type | text | var |
> // | browser_type | text | var |
> // | entry_added | datetime | 8 |
> // | probe | bool | 1 |
> // +----------------------------------+----------------------------------+-------+
> // Indices: op_sys_ip
> // op_sys_type
> //
> // The table holds ~120k records right now, and the above query returns ~1100.
> //
> // To get a feel for the speed it returns, see http://www.hub.org/OS_Survey
> //
> // I can't think of any way to improve the speed, and yes, I do a 'vacuum
> // analyze' on it periodically (did one just before the above EXPLAIN)...
> //
> // Other other note...its a v6.4.2 server, running on a PII with 384Meg of
> // RAM and FreeBSD 3.0-STABLE...
> //
> //
> // Marc G. Fournier
> // Systems Administrator @ hub.org
> // primary: scrappy@hub.org secondary: scrappy@{freebsd|postgresql}.org
> //
> //
> //
>
> --
> Principal Member Technical Staff, beyond.com The world is watching America,
> pub 1024/3CAE01D5 1994/11/03 Dustin Sallings <dustin@spy.net>
> | Key fingerprint = 87 02 57 08 02 D0 DA D6 C8 0F 3E 65 51 98 D8 BE
> L______________________________________________ and America is watching TV. __
>
Marc G. Fournier
Systems Administrator @ hub.org
primary: scrappy@hub.org secondary: scrappy@{freebsd|postgresql}.org