I am randomly getting "SystemError: <class 'pyodbc.Error'> returned a result with an error set" while performing sql query
Our sql query inside Django API perform joins and filtering over millions of records in sql server and takes long time to complete. Error occurs randomly in these api calls.
This seem to be the bug in pyodbc while decoding. This occurs at random in docker based linux environment.
Related issues - github issue 1014, github open issue 640
> 2023-02-06T08:23:54.206253807Z [2023-02-06 08:23:54 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:34) 2023-02-06T08:23:54.290137374Z
> Internal Server Error: /get_table_preview
> 2023-02-06T08:23:54.290184978Z Traceback (most recent call last):
> 2023-02-06T08:23:54.290193279Z File
> "/usr/local/lib/python3.9/encodings/utf_16_le.py", line 15, in decode
> 2023-02-06T08:23:54.290200679Z def decode(input, errors='strict'):
> 2023-02-06T08:23:54.290208080Z File
> "/usr/local/lib/python3.9/site-packages/gunicorn/workers/base.py",
> line 203, in handle_abort 2023-02-06T08:23:54.290214281Z
> sys.exit(1) 2023-02-06T08:23:54.290219781Z SystemExit: 1
> 2023-02-06T08:23:54.290225082Z 2023-02-06T08:23:54.290230382Z The
> above exception was the direct cause of the following exception:
> 2023-02-06T08:23:54.290235682Z 2023-02-06T08:23:54.290240883Z
> Traceback (most recent call last): 2023-02-06T08:23:54.290246183Z
> File
> "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py",
> line 55, in inner 2023-02-06T08:23:54.290251684Z response =
> get_response(request) 2023-02-06T08:23:54.290256884Z File
> "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py",
> line 220, in _get_response 2023-02-06T08:23:54.290262485Z response
> = response.render() 2023-02-06T08:23:54.290267685Z File "/usr/local/lib/python3.9/site-packages/django/template/response.py",
> line 114, in render 2023-02-06T08:23:54.290273786Z self.content =
> self.rendered_content 2023-02-06T08:23:54.290279286Z File
> "/usr/local/lib/python3.9/site-packages/rest_framework/response.py",
> line 70, in rendered_content 2023-02-06T08:23:54.290284586Z ret =
> renderer.render(self.data, accepted_media_type, context)
> 2023-02-06T08:23:54.290289787Z File
> "/usr/local/lib/python3.9/site-packages/rest_framework/renderers.py",
> line 99, in render 2023-02-06T08:23:54.290296187Z ret =
> json.dumps( 2023-02-06T08:23:54.290304288Z File
> "/usr/local/lib/python3.9/site-packages/rest_framework/utils/json.py",
> line 25, in dumps 2023-02-06T08:23:54.290324390Z return
> json.dumps(*args, **kwargs) 2023-02-06T08:23:54.290329990Z File
> "/usr/local/lib/python3.9/json/__init__.py", line 234, in dumps
> 2023-02-06T08:23:54.290335191Z return cls(
> 2023-02-06T08:23:54.290340091Z File
> "/usr/local/lib/python3.9/json/encoder.py", line 199, in encode
> 2023-02-06T08:23:54.290345191Z chunks = self.iterencode(o,
> _one_shot=True) 2023-02-06T08:23:54.290350192Z File "/usr/local/lib/python3.9/json/encoder.py", line 257, in iterencode
> 2023-02-06T08:23:54.290355292Z return _iterencode(o, 0)
> 2023-02-06T08:23:54.290360193Z File
> "/usr/local/lib/python3.9/site-packages/rest_framework/utils/encoders.py",
> line 47, in default 2023-02-06T08:23:54.290365293Z return
> tuple(obj) 2023-02-06T08:23:54.290370194Z File
> "/usr/local/lib/python3.9/site-packages/django/db/models/query.py",
> line 320, in __iter__ 2023-02-06T08:23:54.290375294Z
> self._fetch_all() 2023-02-06T08:23:54.290380094Z File
> "/usr/local/lib/python3.9/site-packages/django/db/models/query.py",
> line 1507, in _fetch_all 2023-02-06T08:23:54.290385195Z
> self._result_cache = list(self._iterable_class(self))
> 2023-02-06T08:23:54.290391195Z File
> "/usr/local/lib/python3.9/site-packages/django/db/models/query.py",
> line 130, in __iter__ 2023-02-06T08:23:54.290396396Z for row in
> compiler.results_iter( 2023-02-06T08:23:54.290401196Z File
> "/usr/local/lib/python3.9/site-packages/django/db/models/sql/compiler.py",
> line 1312, in results_iter 2023-02-06T08:23:54.290406397Z results
> = self.execute_sql( 2023-02-06T08:23:54.290411197Z File "/usr/local/lib/python3.9/site-packages/django/db/models/sql/compiler.py",
> line 1361, in execute_sql 2023-02-06T08:23:54.290416397Z
> cursor.execute(sql, params) 2023-02-06T08:23:54.290421198Z File
> "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py",
> line 103, in execute 2023-02-06T08:23:54.290426298Z return
> super().execute(sql, params) 2023-02-06T08:23:54.290431199Z File
> "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py",
> line 67, in execute 2023-02-06T08:23:54.290436399Z return
> self._execute_with_wrappers( 2023-02-06T08:23:54.290441399Z File
> "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py",
> line 80, in _execute_with_wrappers 2023-02-06T08:23:54.290446500Z
> return executor(sql, params, many, context)
> 2023-02-06T08:23:54.290451500Z File
> "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py",
> line 89, in _execute 2023-02-06T08:23:54.290456601Z return
> self.cursor.execute(sql, params) 2023-02-06T08:23:54.290461501Z File
> "/usr/local/lib/python3.9/site-packages/mssql/base.py", line 598, in
> execute 2023-02-06T08:23:54.290466602Z return
> self.cursor.execute(sql, params) 2023-02-06T08:23:54.290471502Z
> SystemError: <class 'pyodbc.Error'> returned a result with an error
> set 2023-02-06T08:23:54.291507188Z [2023-02-06 08:23:54 +0000] [34]
> [INFO] Worker exiting (pid: 34) 2023-02-06T08:23:54.490548019Z
> [2023-02-06 08:23:54 +0000] [48] [INFO] Booting worker with pid: 48
How do I fix or catch this issue?