#mysql #sql-server #database
#MySQL #sql-сервер #База данных
Вопрос:
Я попытался найти ответ здесь и через Google о том, как управлять подключениями для связанного ODBC-соединения сервера.
Обзор
У меня есть связанный сервер с SQL Server 2014 на MySQL для извлечения данных для нашего хранилища данных. Я несколько раз запрашивал базу данных без проблем. Затем вчера внезапно запрос на чтение из таблицы выполняется медленно, а затем я получаю сообщения о том, что приложение, использующее эту базу данных MySQL, получает ошибку «слишком много подключений».
Подробные сведения
Следующий запрос выбирает данные из MySQL и вставляет в таблицу SQL Server.
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 тыс. строк данных и будет расти. База данных MySQL используется нашей клиентской базой, и это внутренний процесс для извлечения данных в наше хранилище данных.
Запрос работал без проблем в течение последней недели тестирования, до вчерашнего дня, когда он заставил нашу службу поддержки MySQL дважды перезапустить сервер MySQL.
Настройка ODBC была выполнена с использованием версии «mysql-connector-odbc-5.3.6-win64.msi». Я не нахожу там никаких настроек для ограничения количества подключений. ODBC показывает «Разрешить несколько операторов», чего нет. В нем также есть «Включить автоматическое переподключение», которое я не могу себе представить, зачем для одного запроса потребуется.
Краткие сведения
Я не могу позволить себе запретить клиентам подключаться, и мне нужно отключить процесс от использования слишком большого количества подключений при выполнении импорта.
Любой вклад в это был бы весьма признателен.
Спасибо
KDS
Обновление: 2016-oct-05
Сервер AWS — m3.xl 4 процессора 15 гигабайт 2 твердотельных накопителя 40 гигабайт
Ответ №1:
Лучше оптимизировать сервер MySQL, если вы не можете позволить себе запретить клиентам подключаться.
С таким количеством информации трудно оптимизировать или предложить что-то для оптимизации MySQL. https://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html
Лучше обновить файл конфигурации. Или ограничение max_connections и переменная InnoDB, если вы используете InnoDB. И ОЗУ тоже.
Можете ли вы обновить приведенную выше информацию в разделе вопросов.
Комментарии:
1. Я пытаюсь получить часть этой информации от моих сетевых парней. Я работаю на серверах SQL, а не на MySQL. Это первый проект, пытающийся получить от него данные. Рабочая среда MySQL> Управление> Клиентские подключения показывает «Предел подключения»: 250. Этим сервером управляет сторонняя компания, хотя он размещен внутри. Было предложено скопировать базу данных в другую базу данных на том же сервере и подключиться к ней. Похоже, что он все равно будет использовать подключения с сервера. Являются ли они подключениями на уровне сервера или на уровне базы данных?
2. Это подключения на уровне сервера, MySQL не работает на уровне схемы. Сколько запросов выполняется в минуту. Также проверьте «Показать список процессов» в MySQL
3. Спасибо, Халид, я работаю над получением этого доступа. Если я запускаю «показать список процессов», я вижу только свои подключения, а не другие. Я обновлю вопрос, как только у меня появится лучший доступ. Также простите мою грамматическую опечатку выше. «Их * предложение …» — вот что я имел в виду.
Ответ №2:
Я собираюсь отметить это как ответ, поскольку прошло около года, и никакого реального решения для этого не было. Проблема заключалась в блокировках на сервере MySQL, поскольку связанный сервер SQL Server считывал данные. Аргументы SQL Server, такие как NOLOCK, не повлияли на решение этой проблемы.
Итак, что было сделано, так это делать резервную копию базы данных MySQL каждую ночь и восстанавливать ее в отдельную базу данных, с которой мы связались для SQL Server, и обрабатывать данные оттуда. Чтение обычно выполняется в течение минуты или двух. SQL Server все еще блокировал таблицу MySQL, и затем пользователи начали складывать несколько подключений, пока все подключения к MySQL не были израсходованы.
Итак, поскольку мне нужны были данные только для ежедневных отчетов, эта отдельная копия базы данных работала, но я не знаю ни о каком другом исправлении этого.
Спасибо
KD