2016-09-29 2 views
0

Ich habe versucht, die Antwort hier und über Google zu finden, wie man Verbindungen für eine Verbindungsserver-ODBC-Verbindung steuert.SQL Server Linked Server zu MySQL "Zu viele Verbindungen"

Übersicht

Ich habe einen Verbindungsserver von SQL Server 2014 zu MySQL für die Zwecke der Daten für unseren Data-Warehouse zu extrahieren. Ich habe die Datenbank einige Male ohne Probleme abgefragt. Dann gestern, plötzlich die Abfrage aus der Tabelle zu lesen ist langsam, und dann bekomme ich Berichte, dass die Anwendung mit dieser MySQL-Datenbank einen "zu viele Verbindungen" Fehler bekommen.

Einzelheiten

Die folgende Abfrage wählt die Daten aus MySQL und Einfügungen in der SQL Server-Tabelle.

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 

Diese Abfrage gibt etwa 200.000 Datenzeilen zurück und wird größer. Die MySQL-Datenbank wird von unserer Kundenbasis verwendet, und dies ist ein Back-End-Prozess, um Daten in unser Data Warehouse zu ziehen.

Die Abfrage funktionierte in der letzten Testwoche bis gestern nicht, was dazu führte, dass unsere MySQL-Unterstützung den MySQL-Server zweimal neu startete.

Die ODBC-Konfiguration wurde mit der Version "mysql-connector-odbc-5.3.6-win64.msi" durchgeführt. Ich finde dort keine Einstellungen, um die Anzahl der Verbindungen zu begrenzen. ODBC zeigt "Mehrere Anweisungen zulassen" an, was nicht der Fall ist. Es hat auch "Automatische Wiederverbindung aktivieren", was ich mir nicht vorstellen kann, warum für eine einzelne Abfrage benötigt würde.

Zusammenfassung

Ich kann nicht leisten, Kunden von der Verbindung, zu stoppen und den Prozess deaktivieren müssen zu vielen Verbindungen verwenden, wenn der Import zu tun.

Jede Eingabe auf diesem würde sehr geschätzt werden.

Dank

KDS

Update: 2016-Oct-05

AWS Server - M3.xlarge 4 CPU 15 GiB 2 40 GiB SSD-Laufwerke

Antwort

0

Es ist besser, Optimieren Sie den MySQL-Server, wenn Sie es sich nicht leisten können, Kunden davon abzuhalten, eine Verbindung herzustellen.

Mit so viel Informationen, es ist schwer zu optimieren oder etwas für MySQL-Optimierung vorschlagen. https://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

Bessere Konfigurationsdatei zu aktualisieren. Oder max_connections limit und InnoDB-Variable, wenn Sie innoDB verwenden. Und RAM auch.

Können Sie die oben genannten Informationen in Frage Abschnitt aktualisieren.

+0

ich einige dieser Informationen aus meinem Netzwerk Jungs zu bekommen versuchen. Ich arbeite auf den SQL Servern und nicht wirklich auf MySQL. Dies ist das erste Projekt, das versucht, Daten von ihm zu erhalten. Die MySQL Workbench> Verwaltung> Clientverbindungen zeigt "Verbindungslimit": 250. Ein Drittanbieter verwaltet diesen Server, obwohl er intern untergebracht ist. Es wurde vorgeschlagen, die Datenbank in eine andere Datenbank auf demselben Server zu kopieren und eine Verbindung zu dieser Datenbank herzustellen. Es sieht so aus, als würde es weiterhin Verbindungen vom Server verwenden. Sind sie Verbindungen auf Server- oder Datenbankebene? – KDS

+0

Es handelt sich um Verbindungen auf Serverebene, MySQL arbeitet nicht auf Schemaebene. Wie viele Abfragen werden pro Minute ausgeführt. Überprüfen Sie auch "show processlist" in MySQL – khalid

+0

Danke Khalid Ich arbeite, um diesen Zugang zu bekommen. Wenn ich "show processlist" starte, sehe ich nur meine Verbindungen und nicht die anderer. Ich werde die Frage aktualisieren, sobald ich einen besseren Zugang habe. Verzeihen Sie auch meine grammatikalische Tippfehler oben. "Ihre * Anregung ..." ist, was ich meinte. – KDS

0

Ich werde dies als beantwortet markieren, da es etwa ein Jahr war und keine echte Lösung dafür. Das Problem waren Sperren auf dem MySQL-Server, da der SQL Server-Verbindungsserver die Daten gelesen hat. SQL Server-Argumente wie NOLOCK hatten keinen Einfluss auf die Auflösung.

Also, was getan wurde, war eine nächtliche Sicherung der MySQL-Datenbank zu machen und sie in einer separaten Datenbank, für die wir mit SQL Server verbunden waren, wiederherzustellen und die Daten von dort zu verarbeiten. Die Lesevorgänge werden normalerweise innerhalb von ein oder zwei Minuten erledigt. SQL Server sperrte immer noch die MySQL-Tabelle, und die Benutzer begannen dann, mehrere Verbindungen zu stapeln, bis alle Verbindungen zu MySQL aufgebraucht waren.

Also, da ich nur die Daten für die Berichterstattung täglich benötigt, funktionierte diese separate Datenbankkopie, aber ich kenne keine andere Lösung zu diesem Problem.

Dank

KD