MySQL Workbench: Как отключить проверку всех таблиц при запуске? - PullRequest
3 голосов
/ 23 апреля 2020

У нас есть проект с сотнями таблиц БД. Каждый раз, когда я открываю MySQL Workbench или меняю DB, он зависает на несколько минут. Все указывает на то, что WB последовательно выполняет SHOW FULL COLUMNS FROM {DB}.{TABLE} для каждой таблицы в БД, в течение которого невозможно выполнить какие-либо запросы, а при попытке выполнить больше запросов пользовательский интерфейс перестает отвечать.

Иногда я пересекаю Великий брандмауэр Китая при доступе к БД и скорости ужасные ~ 15 кБ / с, что усиливает всю проблему до такой степени, что я должен отказаться от WB. Нельзя ждать 10 минут после каждого оператора use database; ...

Есть ли способ, которым я могу переключать БД / открывать соединения без необходимости ждать так долго, прежде чем я смогу выполнить какие-либо запросы?


Подробнее

Когда я смотрю список процессов, я вижу 4 открытых соединения с БД Workbench. Один запускает кучу SHOW FULL COLUMNS FROM {DB}.{TABLE}, другой перечисляет процессы (так как я использую Администрирование / Открытые соединения WB, который работает), и 2 соединения простаивают.

Это выходные данные отладки WB:

21:40:27 [INF][SQL Editor Form]: Opened connection '...' to Source distribution version 5.6.21-69.0-log
21:40:28 [DB3][       GRT task]: Sending task "Live Schema Refresh Task" to dispatcher (don't wait)...
21:40:28 [DB3][  GRTDispatcher]: Running task "Live Schema Refresh Task"
21:40:29 [DB3][  GRTDispatcher]: Task "Live Schema Refresh Task" finished

-- Schema refresh started here
21:40:29 [DB3][SqlEditorSchemaTree]: Fetch schema contents for {DATABASE_HERE}
21:40:29 [DB3][       GRT task]: Sending task "Live Schema Fetch Task" to dispatcher (don't wait)...
21:40:29 [DB3][  GRTDispatcher]: Running task "Live Schema Fetch Task"

-- Here I executed query "SELECT 1;" - it started spinning wheel...
21:40:45 [DB1][SQL Editor Form]: Executing SQL in editor: SQL File 4* (current statement only: yes)...
21:40:45 [DB3][       GRT task]: Sending task "execute sql queries" to dispatcher (don't wait)...
21:40:45 [DB3][  GRTDispatcher]: Running task "execute sql queries"
21:40:45 [DB1][SQL Editor Form]: Background task for sql execution started
21:42:09 [DB2][            grt]: wb.form.showOptions finished in 67.86s

-- Schema refresh finished
21:42:36 [DB3][  GRTDispatcher]: Task "Live Schema Fetch Task" finished
21:42:36 [DB3][SQL Editor Form]: Executing statement range: 0, 8...
21:42:36 [DB3][SQL Editor Form]: Determined statement type: 8
21:42:36 [DB3][SQL Editor Form]: Result will not be editable
21:42:36 [DB3][SQL Editor Form]: Running...
21:42:37 [DB2][ SqlEditorPanel]: Query successfully finished in editor SQL File 4*
21:42:37 [DB3][  GRTDispatcher]: Task "execute sql queries" finished

-- I got result of "SELECT 1;" 2 minutes later

ОБНОВЛЕНИЕ : я заполнил ошибку с Oracle - до сих пор похоже, что обходного пути нет, и это серьезно ограничивает функциональность в некоторых сценариях ios. Проголосуйте, нажав «Влияет на меня», если у вас возникла такая же проблема: https://bugs.mysql.com/bug.php?id=99417

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Возможно, вы захотите попробовать отключить кеширование запросов, если нужно запустить SET GLOBAL query_cache_size = 0;, если доступно.

0 голосов
/ 24 апреля 2020

Попробуйте отключить завершение кода, которое является частью MySQL Workbench, которому требуются все метаданные заранее:

enter image description here

Дерево схемы будет по-прежнему получать имена схем и имена объектов схемы, если она становится активной или ее узел раскрывается в первый раз.

Возможное решение:

MySQL Workbench нужно что-то для Показывать в дереве схемы и наличие перечисленных объектов БД является одним из основных преимуществ перед любым клиентом командной строки. Но вы можете ограничить загрузку объекта БД до абсолютного минимума, никогда не переключая схемы. Тогда задержка произойдет только один раз при запуске соединения, и тогда все остальное должно быть быстрым. Если вам действительно требуется более одной схемы для работы с использованием нескольких подключений к одному хосту, каждое из которых использует другую схему по умолчанию (может быть установлено в параметрах подключения).

По общему признанию, это не идеальное решение , но, по крайней мере, должен позволить вам нормально работать, когда вы закончите фазу запуска.

...