﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
20689	Django 1.5.1: severe performance degradation on Oracle	zakharov.vv@…	nobody	"After migrating to Django 1.5.1, several queries takes thousands times more time comparing to Django 1.4.5.

Example query generated by ORM:
{{{
SELECT COUNT(*) FROM ""TICKETS"" WHERE (""TICKETS"".""T_TYPE"" IN (:arg0, :arg1, :arg2, :arg3) AND ""TICKETS"".""T_PARTNER_CODE"" = :arg4 AND ""TICKETS"".""T_CHANEL"" = :arg5 AND ""TICKETS"".""T_WORKER_CODE"" = :arg6 AND ""TICKETS"".""T_CDATE"" <= :arg7 AND ""TICKETS"".""T_CDATE"" >= :arg8 )
}}}

Django 1.4.5: ~7ms
Django 1.5.1: ~193574ms (about 27000 times more!)

`git bisect` points to this commit: https://github.com/django/django/commit/d194f290571f7e9dda7d2fd7a6f2b171120f2f14. Indeed, forcing `convert_unicode` to be equal to `force_bytes` solves the issue.

The only found difference is in params to query:
Django 1.4.5:
{{{
[1, 38, 76, 92, '777-61', 61, 'pupkin', '2013-07-03 00:00:00', '2013-06-01 00:00:00']
}}}

Django 1.5.1:
{{{
[1, 38, 76, 92, u'777-61', 61, u'pupkin', u'2013-07-03 00:00:00', u'2013-06-01 00:00:00']
}}}

Django 1.5.1 hangs on this string (''django/db/backends/oracle/base.py:710''):
{{{
            return self.cursor.execute(query, self._param_generator(params))
}}}

Directly using cx_Oracle for this query shows no difference for two variants of query params.

Used versions:
* cx-Oracle 5.1.2
* instantclient 11.2.0.3.0 (same for instantclient 10.2.0.5)
* Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production


"	Bug	closed	Database layer (models, ORM)	1.5	Normal	needsinfo	Oracle, cx_oracle, unicode		Accepted	0	0	0	0	0	0
