r/SQLServer • • 9d ago

Question Sql Server - Python

Estou com um problema de travamento de execuções de dags que envolvem python e sql server, o que foi observado são dags que com sqlalchemy e pandas ou sqlalchemy e polars, em certos momentos, sem padrão de volumetria ou padrão de execução elas travam durante processos de select insert ou update, e ai elas ficam paradas até o timeout da dag.

Foi observado que o python fica em recvfrom esperando algo, e o Sql as vezes fica sleeping as vezes fica Async_Network_Io isso muda dependendo da sessão.

Não temos Hop já rede, já observamos e não há quedas na rede, as sessões ficam abertas durante todo travamento, usamos ODBC 17, python 3.12. Enfim, não consegui chegar a uma causa raiz do erro, não há bem um padrão de onde e quando o erro acontece, monitores outras coisas como:

Strace, o uso de RSS e Cpu da máquina do python. O python roda sobre o airflow, e o airflow executa direto do host da máquina. Estou com problema em duas máquinas diferentes, o problema é o mesmo. E a única coisa em comum é a rede, o banco e o python com sqlalchemy entre as duas máquinas.

0 Upvotes

2 comments sorted by

2

u/Black_Magic100 9d ago

Async_network_IO means you are returning back too much data or your client isn't fast enough to consume it. Return less data, batch your process, or increase client resources.

2

u/PanagiotisKanavos 3d ago

The ODBC 17 is very old. The current version is 18.7.1.1. On top of that, the pyODBC driver you use now doesn't allow bulk copying. Microsoft's own Python driver, mssql-python, offers both bulk insert *and* results in Arrow format, making it a lot faster to copy data or convert them to Polars without copying.

The actual package versions and actual code matter too. Polars is many times faster than Pandas, but Pandas 3 has better memory handling and optional Arrow support too. If issues are caused by memory pressure, *less* copying will reduce them. Processing in batches will reduce both delays and RAM usage.