Monthly Archives: Февраль 2020

Степени двойки

Список степени двойки.

Степени двойки позволяют оценить алгоритмы, работающие за логарифмическое время.

Степень двойки (2x) Значение
01
12
24
38
416
532
664
7128
8256
9512
101 024
112 048
124 096
138 192
1416 384
1532 768
1665 536
17131 072
18262 144
19524 288
201 048 576
212 097 152
224 194 304
238 388 608
2416 777 216
2533 554 432
2667 108 864
27134 217 728
28268 435 456
29536 870 912
301 073 741 824
312 147 483 648
324 294 967 296
338 589 934 592
3417 179 869 184
3534 359 738 368
3668 719 476 736
37137 438 953 472
38274 877 906 944
39549 755 813 888
401 099 511 627 776
412 199 023 255 552
424 398 046 511 104
438 796 093 022 208
4417 592 186 044 416
4535 184 372 088 832
4670 368 744 177 664
47140 737 488 355 328
48281 474 976 710 656
49562 949 953 421 312
501 125 899 906 842 624
512 251 799 813 685 248
524 503 599 627 370 496
539 007 199 254 740 992
5418 014 398 509 481 984
5536 028 797 018 963 968
5672 057 594 037 927 936
57144 115 188 075 855 872
58288 230 376 151 711 744
59576 460 752 303 423 488
601 152 921 504 606 846 976
612 305 843 009 213 693 952
624 611 686 018 427 387 904

Резервное копирование в Vertica

В Vertica мы храним аналитические данные, которые в принципе можно не бэкапировать, т.к. объем данных - не велик, и можно перезалить в любой момент. Но это касается лишь новых данных, есть часть данных из старых источников: Oracle, Excel и текстовых документов, которые не желательно перезаливать. Лучше восстановить данные из бэкапа, чем собирать данные из старых источников, которые, возможно, уже и не существуют или с ними что-то случилось.

Снимать бэкап нужно под пользователем dbadmin:

su dbadmin

Создайте директорию, в которую будет записана резервная копия:

mkdir /home/dbadmin/backups20190207

В Vertica создание резервной копии и восстановление из нее осуществуляется с помощью утилиты vbr (думаю, это означает Vertica Backup and Restore). Для vbr нужно создать конфигурационный файл, который используется как для создания копии, так и для восстановления из нее.

Примеры конфигурационных файлов можно посмотреть в каталоге:

/opt/vertica/share/vbr/example_configs

Создайте новый конфигурационный файл /opt/vertica/share/vbr/example_configs/backup_restore_your_database.ini со следующим содержимым:

[Mapping]
v_your_database_node0001 = []:/home/dbadmin/backups20190207
#v_your_database_node0002 = []:/home/dbadmin/backups20190207

[Misc]
tempDir = /tmp

[Database]
dbName = YOUR_DATABASE
dbUser = dbadmin
dbPassword = YOUR_PASSWORD
#dbPromptForPassword = True

Нужно перечислить все узлы вашего кластера: v_your_database_node0001, v_your_database_node0002 и т.д. В нашем случае кластера нет, поэтому одна нода.

В dbName, dbUser и dbPassword укажите параметры подключения к вашей базе данных.

Пароль можно не прописывать, а каждый раз запрашивать, расскомментировав строку: dbPromptForPassword = True.

Возможные проблемы

В данной инструкции явно прописана учетка и пароль, т.к. без этого возникала проблема подключения:
Unable to log vbr invocations. Error SQL command "select log_vbr_invocations('Full Backup Task', '/tmp/vbr_2020-01-04-115520.log', 'SQL6F52TLDAFPCZ9YZEOH83P9YYKL9HW', 'Fail');" failed: vsql: FATAL 3781:  Invalid username or password
Error: SQL command "select name,catalogpath from v_internal.vs_nodes;" failed: vsql: FATAL 3781:  Invalid username or password
Backup FAILED.

Инициализация директории

Перед непосредственным созданием бэкапа нужно проинициализировать указанную в конфиге директорию:

/opt/vertica/bin/vbr -t init -c /opt/vertica/share/vbr/example_configs/backup_restore_your_database.ini 

Создание резервной копии

После инициализации директории выполните команду:
/opt/vertica/bin/vbr -t backup -c /opt/vertica/share/vbr/example_configs/backup_restore_your_database.ini 

Восстановление из резервной копии

Для восстановления из резервной копии выполните команду:
/opt/vertica/bin/vbr -t restore -c /opt/vertica/share/vbr/example_configs/backup_restore_your_database.ini 

Профилирование CPU с помощью Flame Graph

Flame Graph позволяет визуально увидеть чем были заняты процессоры в течении определенного периода.

Снять Flame Graph можно по классической инструкции: https://github.com/BrendanGregg/FlameGraph, что требует некоторых манипуляций.

Но можно пойти более легким путем, используя async-profiler:

  1. Скачиваем стабильный релиз в виде архива
  2. Распаковываем архив
  3. Выполняем команду:
    ./profiler.sh -d 30 -f /tmp/flamegraph.svg 
    

    Где <PID> - это идентификатор Java-процесса.

    -d 30 - продолжительность профилирования, в секундах.

    /tmp/flamegraph.svg - файл сохранения Flame Graph.

Flame Graph можно прекрасно просматрировать в браузере без использования каких-либо дополнительных средств.

В этом можно убедиться на следующем примере Flame Graph (можно кликать на области): Your browser does not support SVG

Поиск искомого Java-процесса можно осуществляется через утилиту jps.

Скрипт, автоматизирующий поиск и снятие Flame Graph:

PID=`jps | grep YOUR_APP_NAME | awk '{print $1}'`
echo PID = $PID
FG=/tmp/flamegraph$PID.svg
echo FG = $FG
~/soft/async-profiler-1.6-macos-x64/profiler.sh -d 30 -f $FG $PID 
p.s. Этому блогу исполнилось 7 лет!