Выполнение даже базовых c SQL запросов для таблицы> 60 ГБ в MariaDB - PullRequest
1 голос
/ 24 апреля 2020

Я запускаю MariaDB на vServer (8 CPU vCores, 32 ГБ ОЗУ) с несколькими десятками таблиц базы данных, которые объединяют данные из внешних сервисов по всему Интернету для эффективного использования на моей коллекции веб-сайтов (в основном, на уровне API с кэшированием базы данных). и его собственный API для простого использования во всех моих проектах).

Все эти таблицы баз данных, кроме одной, допускают быстрые базовые c запросы, такие как

SELECT id, content FROM tablename WHERE date_added > somedate

(с «содержимым» являются некоторые JSON данные). Я использую InnoDB в качестве механизма хранения, чтобы разрешить вставки без блокировки таблицы, «id» всегда является первичным ключом в любой таблице, и большинство этих таблиц имеют только несколько тысяч или, возможно, несколько сотен тысяч записей, что приводит к нескольким сотням МБ .

Одна таблица, где что-то работает не так, хотя уже содержит> 6 миллионов записей (потенциально до 100 миллионов) и использует> 60 ГБ, включая индексы. Я могу вставлять, обновлять и выбирать по «id», но все более сложное (например, поиск в 1 или 2 дополнительных полях или сортировка результатов) переходит в бесконечность. Пример:

SELECT id FROM tablename WHERE extra = ''

В этом запросе будут выбраны записи, в которых «extra» пусто. Существует индекс «extra», и

EXPLAIN SELECT id FROM tablename WHERE extra = ''

говорит мне, что это просто ПРОСТЫЙ запрос с автоматически выбранным правильным индексом («Using where; Using index»). Если я установлю низкое значение LIMIT, я в порядке, выбрав тысячи результатов, и запрос никогда не остановится. Использование более 1 поля в моем поиске даже с комбинированным индексом и явное добавление имени этого индекса в запрос, и мне тоже не повезло.

Так как на моем компьютере более чем достаточно памяти vServer и MariaDB / InnoDB не имеют таких низких пределов размера для таблиц, могут быть некоторые настройки или другие ограничения, которые не позволят мне выполнять запросы для больших таблиц базы данных. Просматривая все настройки MariaDB, я не смог найти ничего подходящего.

Был бы рад, если бы кто-то указал мне правильное направление.

...