2016-09-29 3 views
0

나는 링크 된 서버 ODBC 연결에 대한 연결을 제어하는 ​​방법에 대한 답변을 Google과 Google을 통해 찾으려고했습니다. 개요SQL 서버 연결된 서버 MySQL에 "너무 많은 연결"

나는 우리의 데이터웨어 하우스에 대한 데이터를 추출하는 목적을 위해 MySQL로 SQL 서버 2014에서 연결된 서버를 가지고있다. 나는 문제없이 데이터베이스를 꽤 자주 질의했다. 어제 갑자기 테이블에서 읽는 쿼리가 느리고이 MySQL 데이터베이스를 사용하는 응용 프로그램이 "너무 많은 연결"오류가 발생한다는 보고서를받습니다.

세부

다음 쿼리는 SQL Server 테이블에 MySQL과 삽입에서 데이터를 선택합니다.

INSERT INTO tmpCustomers 
    (fieldlist) 
SELECT 
    myc.contact_id, 
    myl.franchise_id, 
    myl.lead_source, 
    LEFT(RTRIM(myc.first_name) + ' ' + RTRIM(myc.last_name),100) AS Name, 
    myc.first_name, 
    myc.last_name, 
    myc.company, 
    myc.Email, 
    myc.primary_phone, 
    myc.home_phone, 
    myc.mobile_phone, 
    myc.work_phone, 
    myc.fax, 
    myc.address1, 
    myc.Address2, 
    myc.City, 
    myc.[state], 
    myc.zip_code, 
    myc.created_date, 
    myc.updated_date 
FROM [MYSQLDB]...[franchise] myf 
INNER JOIN [MYSQLDB]...[leads] myl 
    ON myl.franchise_id = myf.franchise_id 
INNER JOIN [MYSQLDBE]...[contact] myc 
    ON myc.contact_id = myl.contact_id 

이 쿼리는 약 200,000 행의 데이터를 반환하며 커집니다. MySQL 데이터베이스는 고객 기반에서 사용되며 데이터웨어 하우스에 데이터를 가져 오는 백 엔드 프로세스입니다.

어제까지 MySQL의 지원이 MySQL 서버를 두 번 다시 시작하게하는 쿼리가 지난 주 테스트를 통해 문제없이 작동했습니다.

ODBC 설정은 "mysql-connector-odbc-5.3.6-win64.msi"버전을 사용하여 수행되었습니다. 연결 수를 제한하는 설정이 없습니다. ODBC는 "Allow multiple statements"를 보여 주지만, 그렇지 않습니다. 또한 "자동 재 연결 사용"기능이있어 단일 쿼리가 필요한 이유를 알 수 없습니다.

요약

내가 연결하는 고객을 중지하고 가져 오기를 수행 할 때 너무 많은 연결을 사용하는 프로세스를 중지해야 여유가 없다.

위의 내용은 크게 감사하겠습니다.

감사

KDS

업데이트 : 2016 10 월은-05

AWS 서버 - M3.xlarge 4 CPU 15 지브 2 (40) 지브 SSD는 드라이브

답변

0

는 것이 좋습니다 고객이 연결하지 못하게하려면 MySQL 서버를 최적화하십시오.

이 많은 정보를 통해 MySQL 최적화를 위해 뭔가를 최적화하거나 제안하기가 어렵습니다. https://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

구성 파일을 업데이트하는 것이 좋습니다. 또는 innoDB를 사용하는 경우 max_connections 제한과 InnoDB 변수. 그리고 RAM도.

위의 정보는 질문 섹션에서 업데이트 할 수 있습니까?

+0

감사

. SQL 서버에서 작업하고 실제로 MySQL에서는 작동하지 않습니다. 이것은 데이터를 가져 오는 첫 번째 프로젝트입니다. MySQL Workbench> 관리> 클라이언트 연결은 "연결 제한": 250을 보여줍니다. 타사는 내부적으로 보관되어 있지만이 서버를 관리하고 있습니다. 동일한 서버의 다른 데이터베이스에 데이터베이스를 복사하고 연결하는 것이 좋습니다. 그것은 여전히 ​​서버에서 연결을 사용하는 것 같습니다. 서버 레벨 또는 데이터베이스 레벨 연결입니까? – KDS

+0

그것은 서버 수준 연결이며, MySQL은 스키마 수준에서 작동하지 않습니다. 분당 실행되는 쿼리 수입니다. 또한 "show processlist"in MySQL – khalid

+0

감사합니다 khalid 나는 그 액세스 권한을 얻으려고하고 있습니다. "show processlist"를 실행하면 다른 사람들이 아닌 내 연결 만 볼 수 있습니다. 나는 좀 더 나은 접근을 얻 자마자 질문을 업데이트 할 것이다. 위의 내 문법적 오타도 용서하십시오. "그들의 * 제안 ..."은 내가 의미했던 것입니다. – KDS

0

약 1 년이되었고 실제 해결책이 없으므로이 내용을 답변으로 표시하겠습니다. 이 문제는 SQL Server가 연결된 서버가 데이터를 읽었을 때 MySQL 서버의 잠금 장치였습니다. NOLOCK과 같은 SQL Server 인수는이 문제를 해결하는 데 아무런 영향을 미치지 않았습니다.

그래서, 매일 밤 MySQL 데이터베이스 백업을 가져 와서 SQL Server에 연결된 별도의 데이터베이스로 복원하고 거기에서 데이터를 처리했습니다. 읽기는 대개 1-2 분 안에 완료됩니다. SQL Server는 여전히 MySQL 테이블에 잠금을 설정하고 있었고 사용자는 MySQL에 대한 모든 연결이 모두 소모 될 때까지 다중 연결을 스택하기 시작했습니다.

데이터를 매일보고하기위한 데이터가 필요했기 때문에 별도의 데이터베이스 복사본이 작동했지만이 문제에 대한 다른 해결 방법은 없습니다. 내 네트워크들에서이 정보의 일부를 얻기 위해 노력하고 있어요 KD