Для профилирования mysql управляют, чтобы Вы могли использовать SHOW PROFILE
mysql> SET profiling = 1;
mysql> [type your query here]
mysql> SHOW PROFILE;
и получить больше информации о том, что сделал бы mysql для получения желаемого результата, Вы могли использовать EXPLAIN
.
mysql> EXPLAIN [type your query here]
Хорошие начальные точки для оптимизации являются использованием индексов и увеличением использования памяти в my.cnf
(параметры по умолчанию могли быть очень низкими). Если Вы удаляете много данных в таблице OPTIMIZE TABLE
могло также быть полезным.
OPTIMIZE TABLE table;
В любом случае необходимо использовать вывод ВЫСТАВОЧНОГО ПРОФИЛЯ для определения, какие части требуются большое количество времени и стоят быть оптимизированными.
Знайте к переключателю кэша запроса при оптимизации. Вы обманули бы себя иначе.
Во-первых, отличный вопрос!
Коммутатор -E
показывает только среду в момент запуска процесса, поэтому любые изменения будут невидимы для этого метода. Таким образом, если данные загружаются в среду после запуска процесса, то он не будет обнаружен через этот метод. Однако это, скорее всего, не выполнимая стратегия, ИМХО, по причинам, обсуждаемыми ниже.
Я согласен с Двенадцатом фактором, что уловка вариабельной среды - это путь. Тем не менее, существуют некоторые важные предостережения, которые не были четкими в руководстве в двенадцати факторе, а также в некоторых практических соображениях и техниках, чтобы добраться туда.
Во-первых, переменные среды являются волатильными (непостоянными). Все данные теряются при перезагрузке. Это означает, что если конфигурация нет где-то сохраняется , она будет невосстановлена в случае перезагрузки сервера, если только он не находится в памяти в / dev / main0
sys-admin (не азартная игра я бы сделал с 128-битными ключами). Если это частный ключ сервера, у вас есть лучший главный и в худшую катастрофическую проблему на ваших руках (ваш CA может потребоваться повторно выдать ключи). Это делает хороший случай, когда конфиг должен быть записан где-то, и я не думаю, что многие будут оспаривать это. Где / как его хранить, это то, что важно.
Приложение Twelve Factor обращается к этому, хотя и прямо вперед. «Испытание Litmus для того, будет ли приложение всем правильно обоснованным конфигурациями из кода, является ли кодовая база с открытым исходным кодом в любой момент, без ущерба для любых учетных данных». Таким образом, мы знаем, что мы должны записать его где-то , и что мы не можем поставить конфиг в кодовую базу. «Другой подход к конфигурации - это использование файлов конфигурации, которые не проверяются в управлении пересмотром». Это то, что я бы сделал.
Приложение Twelve Factor говорит: «Легко ошибочно проверить в файле конфигурации в REPO». Чтобы противостоять этому, конфигурацию производства (например, закрытые ключи) должно отличаться от разработки и тестирования конфигурации. Они также должны быть строго контролируются. Некоторые системы контроля версий, такие как Git
, имеют черные списки (например, файл .gitignore
), который предотвращает проверку в определенных файлах. Они также должны быть использованы. «Существует тенденция для разбросанных файлов конфигурации в разных местах и различных форматах, что делает его трудно увидеть и управлять всей конфигурацией в одном месте. Далее эти форматы имеют тенденцию быть языковыми или рамками. Это противодействует, просто определяя «переменные среды» в файле конфигурации. Это может быть загружено в окружающую среду при запуске сервером.
Что я бы сделал:
Хорошо, поэтому для первого вопроса получается статистика SEBUGFS
команда
, что позволяет тому, что являются запускными блоками для каждого участка группы. Кроме того, я догадался, что не пришлось бы быть последовательным и увеличением, поэтому базовое добавление смещения в таблицу INODE и команду
дала мне первые неисправности; Это также подтвердило мое подозрение в последнем плохом секторе, где мои расчеты группы блоков указали, что он был в неправильной группе.
byte address block group what first inumber
0x8B00020000 145752096 4448 inode table block 0 36438017
0x8B00027000 145752103 4448 inode table block 7 36438129
0x8B0002C000 145752108 4448 inode table block 12 36438209
0x8B00209000 145752585 4448 inode table block 489 36445841
0x8B0029A000 145752730 4449 inode table block 122 36448161
Поскольку блок составляет 4096 байт, и каждая запись таблицы INODE составляет 256 байтов, есть 16 inodes на блок. Таким образом, у меня теперь все 80 потерянных индексных записей индийского стола.
Теперь давайте обратимся к журналу. Я писал небольшой инструмент , который сбрасывает информацию в каждом блоке журнала. Поскольку журнал SuperBlock отсутствовал, были два предмета информации, которые мне нужны для этого, которые были потеряны:
, если Я заставлял один (или оба) из этих коммутаторов, некоторые из блоков дескриптора в журнале переполнены его блок, доказывая, что эти флаги не были установлены.
Один скрипт awk ( fulllog.awk
) позже у меня есть журнал форма
0x0002A000 - descriptors
0x0002B000 -> block 159383670
0x0002C000 -> block 159383671
0x0002D000 -> block 0
0x0002E000 -> block 155189280
0x0002F000 -> block 195559440
0x00030000 -> block 47
0x00031000 -> block 195559643
0x00032000 -> block 195568036
0x00033000 -> block 159383672
0x0002B000 - invalid/data block
0x0002C000 - invalid/data block
0x0002D000 - invalid/data block
0x0002E000 - invalid/data block
0x0002F000 - invalid/data block
0x00030000 - invalid/data block
0x00031000 - invalid/data block
0x00032000 - invalid/data block
0x00033000 - invalid/data block
0x00034000 - commit record
commit time: 2014-12-25 16:53:13.703902604 -0500 EST
с этим, еще один скрипт awk ( dumpallfor.awk
) сбрасывает все блоки :
byte address block number of journaled blocks
0x8B00020000 145752096 6
0x8B00027000 145752103 10
0x8B0002C000 145752108 206
0x8B00209000 145752585 1
0x8B0029A000 145752730 0
Так что последний блок действительно потерян :( С любой удачей я могу узнать, какие файлы были там с DEBUBFS
команду NCHECK
.
Так что у меня есть Букет из блоков. И все они кажутся отличаются! Теперь что?
I может пройти через записи отзыва, но я не могу определить эту структуру. I Может ли пройти отметки записи Commit Record, но до того, как я попробую это, я хочу видеть, как каждый блок таблицы INODE отличается. Итак, я писал еще одну быструю программу ( diff.go
), чтобы найти это.
По большей части файлы, которые отличаются отличаются только в временных метках, поэтому мы можем просто выбрать файл с последними временными метками. Мы сделаем это позже. Для всех остальных файлов мы получаем это:
36438023 - size differs
36438139 - OSD1 (file version high dword) differs
36438209 - OSD1 differs
HM, это не хорошо ... Файл с различным размером будет проблемой, и я понятия не имею, что делать с двумя файлами OSD1. Я также попробовал использовать Debugfs
NCHECK
, чтобы увидеть, какие файлы были, но у нас нет совпадения.
Затем я выяснил, какие блок свалки имеют последние метки времени (то же репо, Neight.go
). Важно отметить, что у меня были блоки, отсканированные в хронологическом порядке. Это не обязательно так же, как численный порядок по номеру блока; Журнал не всегда хранятся в хронологическом растущем порядке.
Как получается, однако, новейший блок (по времени Comply) действительно является тем, что с последними временными метками!
Давайте попробуем эти последние блоки и посмотрим, сможем ли мы восстановить что-нибудь из них.
sudo dd if=BLOCKFILE of=DDRESCUEIMG bs=1 seek=BYTEOFFSET conv=notrunc
После этого мой домашний каталог вернулся!
Теперь давайте узнаем, что эти три разные файлы были ...
Inode Pathname
36438023 /pietro/.cache/gdm/session.log
36438209 /pietro/.config/liferea
36438139 /pietro/.local/share/zeitgeist/fts.index
Единственная важная вещь, что есть каталог конфигурации Liferea, но я не думаю, что это было повреждено; Это один из различных OSD1.
И давайте узнаем об этих 16 inodes в конечном блоке, то тот, который мы не смогли восстановить:
Inode Pathname
36448176 /pietro/k2
36448175 /pietro/Downloads/sOMe4P7.jpg
36448174 /pietro/Downloads/picture.png
36448164 /pietro/Downloads/tumblr_nfjvg292T21s4pk45o1_1280.png
36448169 /pietro/Downloads/METROID Super Zeromission v.2.3+HARD_v2.4.zip
36448165 /pietro/Downloads/tumblr_mrfex1kuxa1sbx6kgo1_500.jpg
36448173 /pietro/Downloads/1*-vuzP4JAoPf9S6ZdHNR_Jg.jpeg
36448162 /pietro/.cache/upstart/gnome-settings-daemon.log.6.gz
36448163 /pietro/.cache/upstart/dbus.log.7.gz
36448171 /pietro/.cache/upstart/gnome-settings-daemon.log.3.gz
36448161 /pietro/.local/share/applications/Knytt Underground.desktop
36448166 /pietro/Documents/Screenshots/Screenshot from 2014-12-03 15:47:29.png
36448170 /pietro/Documents/Screenshots/Screenshot from 2014-12-03 16:51:26.png
36448172 /pietro/Documents/Screenshots/Screenshot from 2014-12-03 19:08:54.png
36448168 /pietro/Documents/transactions/premiere to operating transaction 4305747926.pdf
36448167 /pietro/Documents/transactions/transaction 4315883542.pdf
в короткие сроки:
, поэтому не пострадавшим, но не общая потеря, и я узнал больше о EXT4 в процессе. Спасибо, в любом случае!
Обновление
может также поставить это там:
NOT YET /pietro/k2
FOUND /pietro/Downloads/sOMe4P7.jpg
NOT YET /pietro/Downloads/picture.png
FOUND /pietro/Downloads/tumblr_nfjvg292T21s4pk45o1_1280.png
GOOGLEIT /pietro/Downloads/METROID Super Zeromission v.2.3+HARD_v2.4.zip
FOUND /pietro/Downloads/tumblr_mrfex1kuxa1sbx6kgo1_500.jpg
FOUND /pietro/Downloads/1*-vuzP4JAoPf9S6ZdHNR_Jg.jpeg
UNNEEDED /pietro/.cache/upstart/gnome-settings-daemon.log.6.gz
UNNEEDED /pietro/.cache/upstart/dbus.log.7.gz
UNNEEDED /pietro/.cache/upstart/gnome-settings-daemon.log.3.gz
UNNEEDED /pietro/.local/share/applications/Knytt Underground.desktop
NOT YET /pietro/Documents/Screenshots/Screenshot from 2014-12-03 15:47:29.png
NOT YET /pietro/Documents/Screenshots/Screenshot from 2014-12-03 16:51:26.png
NOT YET /pietro/Documents/Screenshots/Screenshot from 2014-12-03 19:08:54.png
NOT YET /pietro/Documents/transactions/premiere to operating transaction 4305747926.pdf
NOT YET /pietro/Documents/transactions/transaction 4315883542.pdf
и в случае, если я недостаточно странный, загруженные изображения были:
uvere4p7.jpg
(пародия по закону и порядок Название карты с «& Knuckles» добавлено к нему) TUMBLR_NFJVG292T21S4PK45O1_1280.png
(скриншот этого твита из jk rowling ) TUMBLR_MRFEX1KUXA1SBX6KGO1_500.jpg
(Изображение «окна» не выключалось успешно. «Сообщение об ошибке на афишу на то, что кажется каким-то спортивным событием) 1 * -VUZP4JAOPF9S6ZDHNR_JG.JPEG
( Эта комикс ) Это все были разделены друзьями в чатах.
Я думаю, я буду держать это обновлено? (Не так, как это будет иметь значение ...) Я знаю, что могу все восстановить; Единственный вопрос, когда = P