Подтвердить что ты не робот

Грепинг огромного файла (80 ГБ) любым способом ускорить его?

 grep -i -A 5 -B 5 'db_pd.Clients'  eightygigsfile.sql

Это работает в течение часа на довольно мощном Linux-сервере, который в противном случае не перегружен. Любая альтернатива grep? Что-нибудь о моем синтаксисе, который можно улучшить, (egrep, fgrep лучше?)

Файл фактически находится в каталоге, который совместно используется с монтированием на другой сервер, но фактическое дисковое пространство является локальным, так что это не должно иметь никакого значения?

grep захватывает до 93% CPU

4b9b3361

Ответ 1

Вот несколько вариантов:

1) Префикс команды grep с LC_ALL=C, чтобы использовать локаль C вместо UTF-8.

2) Используйте fgrep, потому что вы ищете фиксированную строку, а не регулярное выражение.

3) Удалите опцию -i, если она вам не нужна.

Итак, ваша команда будет:

LC_ALL=C fgrep -A 5 -B 5 'db_pd.Clients' eightygigsfile.sql

Он также будет быстрее, если вы скопируете файл на RAM-диск.

Ответ 2

Если у вас многоядерный процессор, я бы порекомендовал GNU parallel. Для совместного использования большого файла:

< eightygigsfile.sql parallel --pipe grep -i -C 5 'db_pd.Clients'

В зависимости от ваших дисков и процессоров быстрее читать более крупные блоки:

< eightygigsfile.sql parallel --pipe --block 10M grep -i -C 5 'db_pd.Clients'

Это не совсем понятно из вашего вопроса, но другие опции для grep включают:

  • Отбрасывание флага -i.
  • Использование флага -F для фиксированной строки
  • Отключение NLS с помощью LANG=C
  • Установка максимального количества совпадений с флагом -m.

Ответ 3

Некоторые тривиальные улучшения:

  • Удалите параметр -i, если вы можете, регистр без учета регистра данных будет довольно медленным.

  • Замените . на \.

    Одна точка - это символ регулярного выражения, соответствующий любому символу, который также медленный

Ответ 4

Две линии атаки:

  • Вы уверены, вам нужен -i, или вы можете избавиться от него?
  • Есть ли у вас больше ядер для игры? grep является однопоточным, поэтому вы можете захотеть запустить их с разными смещениями.