disabling OIDs?

Started by Lonni J Friedmanover 21 years ago19 messagesgeneral
Jump to latest
#1Lonni J Friedman
netllama@gmail.com

The spam filtering package I use (dspam) had a section in their
release notes recently which stated that disabling OIDs greatly
increased speeds, and so they suggested that people do that on their
tables.

When creating new tables, you can disable OIDs with,
CREATE TABLE foo (...) WITHOUT OIDS;
And you can disable OIDs on existing tables by executing for each table,
ALTER TABLE foo SET WITHOUT OIDS;
and then running a vacuumdb (either with pg_vacuumdb or VACUUM ANALYSE;)

Does anyone know of any risks or potential downsides to doing this?

Thanks!

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
L. Friedman netllama@gmail.com
LlamaLand http://netllama.linux-sxs.org

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Lonni J Friedman (#1)
Re: disabling OIDs?

Lonni J Friedman <netllama@gmail.com> writes:

The spam filtering package I use (dspam) had a section in their
release notes recently which stated that disabling OIDs greatly
increased speeds, and so they suggested that people do that on their
tables.

"greatly increased"? I doubt it.

Last I heard, dspam was not noted for any large amount of cluefulness
WRT postgres. It was only recently that we managed to talk them out of
their most egregious bits of mysql-centricity. Going to them for
postgres tuning tips is about like coming to me for mysql tuning ...

regards, tom lane

#3Lonni J Friedman
netllama@gmail.com
In reply to: Tom Lane (#2)
Re: disabling OIDs?

On Sun, 12 Dec 2004 22:16:27 -0500, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Lonni J Friedman <netllama@gmail.com> writes:

The spam filtering package I use (dspam) had a section in their
release notes recently which stated that disabling OIDs greatly
increased speeds, and so they suggested that people do that on their
tables.

"greatly increased"? I doubt it.

Last I heard, dspam was not noted for any large amount of cluefulness
WRT postgres. It was only recently that we managed to talk them out of
their most egregious bits of mysql-centricity. Going to them for
postgres tuning tips is about like coming to me for mysql tuning ...

OK, thanks. So is there any real benefit in doing this in a generic
(non-dspam) sense, or is it just a hack that wouldn't be noticable?
Any risks or potential problems down the line?

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
L. Friedman netllama@gmail.com
LlamaLand http://netllama.linux-sxs.org

#4Neil Conway
neilc@samurai.com
In reply to: Lonni J Friedman (#3)
Re: disabling OIDs?

On Sun, 2004-12-12 at 20:25 -0800, Lonni J Friedman wrote:

OK, thanks. So is there any real benefit in doing this in a generic
(non-dspam) sense, or is it just a hack that wouldn't be noticable?
Any risks or potential problems down the line?

It saves 4 bytes per row; depending on alignment and padding
considerations, that may or may not equate to disk space savings. Other
than the inability to use OIDs on the table, there is no real risks to
doing this -- I'm planning to advocate making WITHOUT OIDS the default
in PostgreSQL 8.1+. You can get this behavior in 8.0 by setting the
default_with_oids config variable to "false".

-Neil

#5Bruce Momjian
bruce@momjian.us
In reply to: Lonni J Friedman (#3)
Re: disabling OIDs?

Lonni J Friedman <netllama@gmail.com> writes:

OK, thanks. So is there any real benefit in doing this in a generic
(non-dspam) sense, or is it just a hack that wouldn't be noticable?
Any risks or potential problems down the line?

OIDs increase the storage requirements so they do slow postgres somewhat.
About (exactly?) the same impact as adding another integer column. That will
have a bigger impact on a narrow table than wider tables.

--
greg

#6Mark Dexter
MDEXTER@dexterchaney.com
In reply to: Bruce Momjian (#5)
Re: disabling OIDs?
Show quoted text

For what it's worth, OIDs are required if you ever want to use
updateable cursors with the ODBC driver. We discovered this the hard
way. Mark Dexter

#7Bruce Momjian
bruce@momjian.us
In reply to: Mark Dexter (#6)
Re: disabling OIDs?

"Mark Dexter" <MDEXTER@dexterchaney.com> writes:

For what it's worth, OIDs are required if you ever want to use
updateable cursors with the ODBC driver. We discovered this the hard
way. Mark Dexter

That's unfortunate. Is it because it's difficult to track down the primary key
of the table? Is it any easier to track down the primary key of the table in
8.0? It would be much better if it checked the primary key and used that
instead of OIDs.

Though I'm unclear implementing "updateable cursors" in the client-end is
really a good idea. I suppose it's nice if you understand the limitations
inherent.

--
greg

#8Mark Dexter
MDEXTER@dexterchaney.com
In reply to: Bruce Momjian (#7)
Re: disabling OIDs?

I don't know why they use OID's for cursors. But I do know that if you
run a trace the SQL that creates the cursor uses OID's,
so it doesn't work if the table is created without OID's. Also, if you
want to have updateable cursors against views (i.e., a view with rules
for INSERT, UPDATE, and DELETE), you must name the OID and CTID as
columns in the view. Again, we learned this the hard way. Mark Dexter

-----Original Message-----
From: gsstark@mit.edu [mailto:gsstark@mit.edu]
Sent: Monday, December 13, 2004 12:06 PM
To: Mark Dexter
Cc: pgsql-general@postgresql.org; gsstark@mit.edu
Subject: Re: disabling OIDs?

"Mark Dexter" <MDEXTER@dexterchaney.com> writes:

For what it's worth, OIDs are required if you ever want to use
updateable cursors with the ODBC driver. We discovered this the
hard way. Mark Dexter

That's unfortunate. Is it because it's difficult to track down the
primary key of the table? Is it any easier to track down the primary key
of the table in 8.0? It would be much better if it checked the primary
key and used that instead of OIDs.

Though I'm unclear implementing "updateable cursors" in the client-end
is really a good idea. I suppose it's nice if you understand the
limitations inherent.

--
greg

#9Kall, Bruce A.
kall@mayo.edu
In reply to: Mark Dexter (#8)
Re: SELECTing on age

I'm attempting to select records from my postgresql database using php
based on whether someone is at least 17 years old on the date of a
particular visit.

My sql is:

$db_sql = "SELECT * from list WHERE ((visit_date - birth_date) >= 17)'"
$db_result = db_exec($db_sql)
$num = pg_num_rows($db_result);
for($i = 0; $i < $num; $i++)
{
$data = pg_num_rows($db_result,$i)
$visit_date = $data["visit_date"];
$birth_date = $data["birth_date"];
echo "Visit date[$visit_date] Birth date[$birth_date]";
}

The problem I'm having is that the the query is returning results for
some people with ages < 17 (most of them are correct, just a couple of
incorrect ones interspersed with the correct ones that are over 17)?

For example, my output contains:

Visit date[2004-07-14] Birth date[2004-02-19]
and
Visit date[2004-08-11] Birth date[2003-04-21]

which are clearly people who are < 17.

Any suggestions on how to track down this problem or rework the query so
it always works correctly? If I reverse the query and look for people <
17, I don't get any that are older than 17.

Thanks,
Bruce

#10Scott Marlowe
smarlowe@g2switchworks.com
In reply to: Kall, Bruce A. (#9)
Re: SELECTing on age

On Mon, 2004-12-13 at 15:15, Kall, Bruce A. wrote:

I'm attempting to select records from my postgresql database using php
based on whether someone is at least 17 years old on the date of a
particular visit.

My sql is:

$db_sql = "SELECT * from list WHERE ((visit_date - birth_date) >= 17)'"
$db_result = db_exec($db_sql)
$num = pg_num_rows($db_result);
for($i = 0; $i < $num; $i++)
{
$data = pg_num_rows($db_result,$i)
$visit_date = $data["visit_date"];
$birth_date = $data["birth_date"];
echo "Visit date[$visit_date] Birth date[$birth_date]";
}

The problem I'm having is that the the query is returning results for
some people with ages < 17 (most of them are correct, just a couple of
incorrect ones interspersed with the correct ones that are over 17)?

For example, my output contains:

Visit date[2004-07-14] Birth date[2004-02-19]
and
Visit date[2004-08-11] Birth date[2003-04-21]

which are clearly people who are < 17.

Check out what this query tells you:

postgres=# select ('2004-07-31'::date-'2004-07-01'::date);
?column?
----------
30

Notice how the output of subtracting one date from another is an int for
the number of days? A better way would be:

select * from table1 where dt <now()-'17 years'::interval;

#11Hengki Suhartoyo
hengman03@yahoo.com
In reply to: Kall, Bruce A. (#9)
increasing max_connections on freebsd

Hello...

I want to increase my max_connections up to 128
connections, but I got that I need to recompile my
kernel. I'm newbie in postgresql and freebsd. How to
increase max_connections and recompile freebsd kernel.

Help Me please.....

Thank's

__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

#12Frank D. Engel, Jr.
fde101@fjrhome.net
In reply to: Hengki Suhartoyo (#11)
Re: increasing max_connections on freebsd

You might want to check some of these sites:

http://www.silverwraith.com/papers/freebsd-kernel.php
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/
kernelconfig.html

Anyone have a clue why he would need to recompile his kernel for this,
though?

On Dec 14, 2004, at 5:46 AM, Hengki Suhartoyo wrote:

Hello...

I want to increase my max_connections up to 128
connections, but I got that I need to recompile my
kernel. I'm newbie in postgresql and freebsd. How to
increase max_connections and recompile freebsd kernel.

Help Me please.....

Thank's

__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

---------------------------(end of
broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly

-----------------------------------------------------------
Frank D. Engel, Jr. <fde101@fjrhome.net>

$ ln -s /usr/share/kjvbible /usr/manual
$ true | cat /usr/manual | grep "John 3:16"
John 3:16 For God so loved the world, that he gave his only begotten
Son, that whosoever believeth in him should not perish, but have
everlasting life.
$

___________________________________________________________
$0 Web Hosting with up to 120MB web space, 1000 MB Transfer
10 Personalized POP and Web E-mail Accounts, and much more.
Signup at www.doteasy.com

#13Michael Fuhr
mike@fuhr.org
In reply to: Frank D. Engel, Jr. (#12)
Re: increasing max_connections on freebsd

On Tue, Dec 14, 2004 at 10:01:47AM -0500, Frank D. Engel, Jr. wrote:

On Dec 14, 2004, at 5:46 AM, Hengki Suhartoyo wrote:

I want to increase my max_connections up to 128
connections, but I got that I need to recompile my
kernel. I'm newbie in postgresql and freebsd. How to
increase max_connections and recompile freebsd kernel.

You might want to check some of these sites:

http://www.silverwraith.com/papers/freebsd-kernel.php
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/
kernelconfig.html

Anyone have a clue why he would need to recompile his kernel for this,
though?

The error probably says something about not having enough shared
memory or semaphores. On FreeBSD some IPC settings can be configured
via sysctl but others might need to be built into the kernel. For
example, on FreeBSD 4, trying to set kern.ipc.semmni or kern.ipc.semmns
with sysctl fails, saying that the OID is read-only.

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

#14Christian Kratzer
ck-lists@cksoft.de
In reply to: Michael Fuhr (#13)
Re: increasing max_connections on freebsd

On Tue, 14 Dec 2004, Michael Fuhr wrote:

On Tue, Dec 14, 2004 at 10:01:47AM -0500, Frank D. Engel, Jr. wrote:

[snipp]

The error probably says something about not having enough shared
memory or semaphores. On FreeBSD some IPC settings can be configured
via sysctl but others might need to be built into the kernel. For
example, on FreeBSD 4, trying to set kern.ipc.semmni or kern.ipc.semmns
with sysctl fails, saying that the OID is read-only.

At least on FreeBSD 5.x there is no need to build a customer kernel.
The following can be set in /boot/loader.conf

# defaults for FreeBSD are as follows
# SEMMNI=10, # of semaphore identifiers
# SEMMNS=60, # of semaphores in system
# SEMUME=10, max # of undo entries per process
# SEMMNU=30, # of undo structures in system
kern.ipc.semmni=40
kern.ipc.semmns=240
kern.ipc.semume=40
kern.ipc.semmnu=120

these will be set on boot.

Greetings
Christian

--
Christian Kratzer ck@cksoft.de
CK Software GmbH http://www.cksoft.de/
Phone: +49 7452 889 135 Fax: +49 7452 889 136

#15Michael Fuhr
mike@fuhr.org
In reply to: Christian Kratzer (#14)
Re: increasing max_connections on freebsd

On Tue, Dec 14, 2004 at 06:34:05PM +0100, Christian Kratzer wrote:

At least on FreeBSD 5.x there is no need to build a customer kernel.
The following can be set in /boot/loader.conf

I forgot about /boot/loader.conf. If I get a chance I'll check if
the settings you posted also work in FreeBSD 4. Thanks.

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

#16Vivek Khera
khera@kcilink.com
In reply to: Hengki Suhartoyo (#11)
Re: increasing max_connections on freebsd

"MF" == Michael Fuhr <mike@fuhr.org> writes:

MF> On Tue, Dec 14, 2004 at 06:34:05PM +0100, Christian Kratzer wrote:

At least on FreeBSD 5.x there is no need to build a customer kernel.
The following can be set in /boot/loader.conf

MF> I forgot about /boot/loader.conf. If I get a chance I'll check if
MF> the settings you posted also work in FreeBSD 4. Thanks.

Yes, they do. You can also bump maxfiles if necessary via a sysctl.

--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Vivek Khera, Ph.D. Khera Communications, Inc.
Internet: khera@kciLink.com Rockville, MD +1-301-869-4449 x806
AIM: vivekkhera Y!: vivek_khera http://www.khera.org/~vivek/

#17Jeff Davis
pgsql@j-davis.com
In reply to: Lonni J Friedman (#3)
Re: disabling OIDs?

On Sun, 2004-12-12 at 20:25 -0800, Lonni J Friedman wrote:

OK, thanks. So is there any real benefit in doing this in a generic
(non-dspam) sense, or is it just a hack that wouldn't be noticable?
Any risks or potential problems down the line?

I'd just like to add that some 3rd party applications/interfaces make
use of OIDs, as a convenient id to use if there is no primary key (or if
the 3rd party software doesn't take the time to find the primary key).

One might argue that those 3rd party applications/interfaces are broken,
but you still might want to keep OIDs around in case you have a use for
one of those pieces of software.

Regards,
Jeff

#18Martijn van Oosterhout
kleptog@svana.org
In reply to: Jeff Davis (#17)
Re: disabling OIDs?

On Sat, Jan 01, 2005 at 06:35:30PM -0800, Jeff Davis wrote:

On Sun, 2004-12-12 at 20:25 -0800, Lonni J Friedman wrote:

OK, thanks. So is there any real benefit in doing this in a generic
(non-dspam) sense, or is it just a hack that wouldn't be noticable?
Any risks or potential problems down the line?

I'd just like to add that some 3rd party applications/interfaces make
use of OIDs, as a convenient id to use if there is no primary key (or if
the 3rd party software doesn't take the time to find the primary key).

One might argue that those 3rd party applications/interfaces are broken,
but you still might want to keep OIDs around in case you have a use for
one of those pieces of software.

Yep, especially since an OID is not a unique value and so can't
possibly be a primary key and generally isn't indexed either. Even
Access asks you to identify the primary key...
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/

Show quoted text

Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a
tool for doing 5% of the work and then sitting around waiting for someone
else to do the other 95% so you can sue them.

#19Robert Treat
xzilla@users.sourceforge.net
In reply to: Martijn van Oosterhout (#18)
Re: disabling OIDs?

On Sunday 02 January 2005 08:24, Martijn van Oosterhout wrote:

On Sat, Jan 01, 2005 at 06:35:30PM -0800, Jeff Davis wrote:

On Sun, 2004-12-12 at 20:25 -0800, Lonni J Friedman wrote:

OK, thanks. So is there any real benefit in doing this in a generic
(non-dspam) sense, or is it just a hack that wouldn't be noticable?
Any risks or potential problems down the line?

I'd just like to add that some 3rd party applications/interfaces make
use of OIDs, as a convenient id to use if there is no primary key (or if
the 3rd party software doesn't take the time to find the primary key).

One might argue that those 3rd party applications/interfaces are broken,
but you still might want to keep OIDs around in case you have a use for
one of those pieces of software.

Yep, especially since an OID is not a unique value and so can't
possibly be a primary key and generally isn't indexed either. Even
Access asks you to identify the primary key...

Of course some 3rd party apps are nice and they look for a primary key first,
then a unique index, then look for an oid. Furthermore the really clueful
ones will check # of affected rows = 1 when modifying by oid, so its pretty
safe.

--
Robert Treat
Build A Brighter Lamp :: Linux Apache {middleware} PostgreSQL