커스텀 커넥터를 사용하여 Django에서 MySQL/MariaDB 연결을 적절하게 끊는 방법
현재 프로젝트를 진행하고 있으며 마리아DB 커넥터를 사용하여 쿼리를 실행하고 있습니다.
ORM을 사용할 수 없기 때문에 raw 쿼리를 사용해야 합니다.
일반적으로 시스템은 예상대로 정상적으로 동작하지만 조금 '큰' 쿼리를 하면Too many connections
에러 메시지
MySQL 커넥터와 MariaDB 커넥터 모두에서 이 문제가 발생했지만 주로 MariaDB를 사용하고 있습니다.
코드의 예(절단/간소화):
import mariadb
def get_cursor():
conn = mariadb.connect(
user="user",
password="pass",
host="localhost",
database="db")
return conn, conn.cursor(named_tuple=True)
def get_duplicated_variants():
results = []
conn_cursor = get_cursor()
cursor = conn_cursor[1]
conn = conn_cursor[0]
try:
cursor.execute("SELECT * FROM `db`.s_data;")
columns = [column[0] for column in cursor.description]
results = []
for row in cursor.fetchall():
results.append(dict(zip(columns, row)))
cursor.close()
conn.close()
return results
except mariadb.Error as e:
print(f"Error: {e}")
내가 시도한 것:
show status like '%onn%';
또, 다음과 같은 것도 있습니다.show variables like 'max_connections';
그래서...max_used_connections = 152
그리고 나는 그렇게 했다.2503 Connections
.
또한 다음 쿼리를 실행하려고 했습니다.
SELECT
CONCAT('KILL ', id, ';')
FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE `User` = 'user'
AND `Host` = 'localhost'
AND `db` = 'db';
이 질문에서 보듯이.
그러나 쿼리를 실행한 후 연결 수가 동일하여 작동하지 않습니다.
연결을 제대로 닫으려면 어떻게 해야 하나요?
둘 다 사용하기 때문에 연결이 아직 활성화되지 않은 이유를 이해할 수 없습니다.cursor.close()
커서를 닫고conn.close()
접속을 종료합니다만, 접속은 아직 액티브하게 되어 있는 것 같습니다.
늘릴 수 있다는 걸 알아max_connections
예를 들어 다음과 같습니다.set global max_connections = 500;
쿼리 완료 후 백엔드에서 연결을 종료하고 싶습니다.
감 잡히는 게 없어요?
connection close()를 위해 여기에 있는 API는 확실히 연결이 닫혀 있는 것이 확실합니다.
코드를 잘랐다고 하셨는데, 한 프로그램에서 2,503개의 접속에 대한 코멘트를 보면 확실히 그 접속을 공유하지 않고 각 쿼리에 대해 새로운 접속을 만들고 있는 것처럼 보입니다.포함하지 않은 코드를 검사하여 해당 연결을 올바르게 저장 및 재사용하고 있는지 확인하는 것이 좋습니다.이 경우, 재작성하는 데 비용이 많이 듭니다.
마지막으로, 저는 대신 다음과 같은 것으로 주(州) 테이블을 보고 있을 것입니다.netstat
어떤 접속이 실제로 행해지고 있는지, 또 어디에서 행해지고 있는지를 확인할 수 있습니다.다른 엔티티에서 DB로의 접속을 제외하거나 실제로 연결이 파괴되지 않은 것은 분명하지 않습니다.간단히 말해서, 나는 당신이 여기서 속임수를 쫓고 있는지 다소 확신이 들지 않는다.2000을 넘는 접속은 의외라고 생각합니다.또, 우선, 당신이 제공한 코드에 근거해, 왜 이렇게 많은 접속이 작성되고 있는지를 조사해야 합니다.
언급URL : https://stackoverflow.com/questions/68191265/how-to-properly-kill-mysql-mariadb-connections-in-django-using-custom-connector
'programing' 카테고리의 다른 글
PHP의 숫자와 같은 문자를 증가시키는 방법은 무엇입니까? (0) | 2022.11.22 |
---|---|
어레이 내의 아이템을 교환하는 방법 (0) | 2022.11.22 |
String Utils 입니다.EMPTY를 권장합니다. (0) | 2022.11.22 |
웹 서비스 URL 끝점을 변경하는 방법 (0) | 2022.11.21 |
MySQL에서 두 개의 단일 열 인덱스와 하나의 두 열 인덱스를 비교하시겠습니까? (0) | 2022.11.21 |