Opened 19 years ago
Closed 19 years ago
#4732 closed defect (fixed)
pypgsql overuses server-side cursors resulting in large performance penalty
| Reported by: | Owned by: | Christian Boos | |
|---|---|---|---|
| Priority: | high | Milestone: | 0.10.4 | 
| Component: | general | Version: | 0.10.3 | 
| Severity: | major | Keywords: | pypgsql cursor | 
| Cc: | jeremy@… | Branch: | |
| Release Notes: | |||
| API Changes: | |||
| Internal Changes: | |||
Description
Most trac + postgres installs are using pyscopg2 which pulls full result sets for cursor.execute by default.
pypgsql, on the other hand, uses server-side cursors by default, leading to incredibly inefficient queries: rather than fetch e.g. select ... limit 20 all at once, it does declare cursor; fetch 1; fetch 1; ... 
Fortunately, server-side cursors can be turned off with great results. I imagine some of pypgsql's widespread perception of slowness with Trac is due to this strange default behavior.
Attachments (1)
Change History (3)
by , 19 years ago
| Attachment: | pypgsql_cursor_fix.diff added | 
|---|
comment:1 by , 19 years ago
| Owner: | changed from to | 
|---|---|
| Priority: | normal → high | 
Thanks for the investigation and the fix!
comment:2 by , 19 years ago
| Resolution: | → fixed | 
|---|---|
| Status: | new → closed | 



  
disable server-side cursors when using pypgsql