에러해결/PYTHON

sqlite operationalerror disk i/o error

Zziii 2024. 2. 27. 14:00
728x90
반응형

파이썬에서 sqlite3를 사용하다가

 

데이터 컬럼 값을 통째로 변경해주려고 하는데 

 

disk i/o error 발생

 

이때는 전에 db를 연결해놓고 conn.close() 를 해주었는지 확인해보는 것이 좋다.

 

conn,close()를 해주지 않은채 다시 연결을 시도할때 위 에러가 발생하는것 같기 때문이다.

 

기존에 연결해놨던것을 close를 했는지 확인이 필요하다.

 

SQLite에서 conn.close()를 해주지 않고 conn.cursor()를 호출한 경우에 데이터베이스 리소스가

제대로 해제되지 않아 메모리 누수가 발생할 수 있기 때문이다. 특히, 대용량의 데이터베이스나 장기간 연결을 유지하는 경우에는 이러한 문제가 심각해질 수 있다.

 

따라서 데이터베이스 작업을 마쳤을 때는 conn.close()를 호출하여 명시적으로 데이터베이스 연결을 닫아주는 것이 좋다. 이렇게 하면 데이터베이스 리소스가 적절하게 해제되어 메모리 누수를 방지할 수 있다. 데이터베이스를 다룰 때는 항상 작업이 끝난 후에는 연결을 닫아주는 습관을 기르는 것이 좋다.

 

메모리 누수(Memory Leak)는 프로그램이 메모리를 동적으로 할당하고 해제하지만, 해제하지 않은 채로 남겨둘 때 발생한다. 데이터베이스 연결을 닫지 않는 것은 이와 비슷한 원리로 작동한다.

 

SQLite의 conn.cursor()는 커서 객체를 반환하며, 이 커서 객체는 데이터베이스에 대한 연결을 유지한다. 이 커서를 사용하여 쿼리를 실행하고 결과를 가져오면서 메모리가 소비된다. 그러나 작업이 끝나고 커서를 닫지 않으면 커서가 차지하고 있는 메모리 공간이 해제되지 않는다. 이러한 상황이 반복되면 메모리 누수가 발생할 수 있다.

데이터베이스 연결 또한 비슷한 원리로 작동한다. 데이터베이스 연결은 메모리 상에서 일정한 공간을 차지하며, 이 연결을 닫지 않으면 이 공간이 해제되지 않는다. 그러면 시간이 지남에 따라 사용 가능한 메모리가 줄어들고, 결국 시스템 리소스 부족으로 인해 프로그램이 느려지거나 비정상적으로 종료될 수 있다.

따라서 데이터베이스 작업을 마치면 데이터베이스 연결을 명시적으로 닫아주는 것이 중요하다. 이를 통해 메모리 누수를 방지하고 프로그램의 안정성과 성능을 유지할 수 있다.

728x90
반응형
let textNodes = document.querySelectorAll("div.tt_article_useless_p_margin.contents_style > *:not(figure):not(pre)"); textNodes.forEach(function(a) { a.innerHTML = a.innerHTML.replace(/`(.*?)`/g, '$1'); });