[ psqlodbc-Bugs-1000604 ] 8.01.0200 slow with long queries
От | |
---|---|
Тема | [ psqlodbc-Bugs-1000604 ] 8.01.0200 slow with long queries |
Дата | |
Msg-id | 20060428082235.5A70F86C421@pgfoundry.org обсуждение исходный текст |
Список | pgsql-odbc |
Bugs item #1000604, was opened at 2006-04-04 10:45 You can respond by visiting: http://pgfoundry.org/tracker/?func=detail&atid=538&aid=1000604&group_id=1000125 Category: None Group: None >Status: Closed Resolution: None Priority: 3 Submitted By: Lasse Haataja (lhaataja) Assigned to: Nobody (None) Summary: 8.01.0200 slow with long queries Initial Comment: psqlodbc 8.01.0200 is much slower than 8.01.0102 (and earlier versions) with long (>10 kilobytes) queries; a 1 megabyte query that takes two seconds with .0102 takes 37 minutes with .0200. According to mylog, most of the time seems to be taken by PGAPI_NumParams. (Although bind.c seems to be identical in .0102 and .0200, perhaps the arguments the function is called with makes the difference?) The culprit seems likely to be the line for (i = 0; i < strlen(stmt->statement); i++) where strlen is (needlessly, since the string is not modified, let alone its length changed) evaluated once for each iteration of the loop, resulting in O(N^2) complexity. Fix should be easy, something along the lines of size_t stmt_len = strlen(stmt->statement); for (i = 0; i < stmt_len; i++) The same problem occurs in misc.c function remove_newlines(); the same fix appears applicable there as well. ---------------------------------------------------------------------- Comment By: Lasse Haataja (lhaataja) Date: 2006-04-05 07:28 Message: This is fixed in 07.03.0260 (The strlen evaluated every iteration is still present in the source in remove_newlines(), but the function doesn't seem to be used at all, so no problem there). ---------------------------------------------------------------------- You can respond by visiting: http://pgfoundry.org/tracker/?func=detail&atid=538&aid=1000604&group_id=1000125
В списке pgsql-odbc по дате отправления: