As a follow up to my own question:
I reran the COPY both ways (with the index and without) while running iostat. The following values are averages: %user %nice %sys %iowait %idle no index 39 0 2.8 11 47 index 16 1.5 2.1 34 46
I’m no performance guru, so please indulge a couple of silly questions:
1) Why is there so much idle time? I would think the CPU would either be busy or waiting for IO. 2) It seems that I need to improve my disk situation. Would it help to add another drive to my PC and keep the input data on a separate drive from my pg tables? If so, some pointers on the best way to set that up would be appreciated.
Please let me know if anyone has additional ideas.
-----Original Message-----
I’m running postgresql 8.1.0 with postgis 1.0.4 on a FC3 system, 3Ghz, 1 GB memory.
I am using COPY to fill a table that contains one postgis geometry column.
With no geometry index, it takes about 45 seconds to COPY one file.
If I add a geometry index, this time degrades. It keeps getting worse as more records are added to the table. It was up to over three minutes per file on my most recent test.
The problem is that each file contains about 5 – 10 minutes of data. Eventually, I want to add the data to the table in “real time”. So the COPY needs to take less time than actually generating the data.
Here is the relevant section of my postgresql.conf.
# - Memory -
shared_buffers = 5000 # min 16 or max_connections*2, 8KB each #temp_buffers = 1000 # min 100, 8KB each #max_prepared_transactions = 5 # can be 0 or more # note: increasing max_prepared_transactions costs ~600 bytes of shared memory # per transaction slot, plus lock space (see max_locks_per_transaction). work_mem = 20000 # min 64, size in KB maintenance_work_mem = 20000 # min 1024, size in KB #max_stack_depth = 2048 # min 100, size in KB
Any suggestions for improvement? |