Skip to content

Instantly share code, notes, and snippets.

View darthunix's full-sized avatar

Denis Smirnov darthunix

View GitHub Profile
@darthunix
darthunix / aliases.sh
Created October 31, 2024 05:07
Aliases
alias pid='f(){ ps aux | grep "$1" | grep -v grep | head -1 | awk '\''{print $2}'\''; }; f'
@darthunix
darthunix / init.vim
Last active November 15, 2023 17:13
" Plugins will be downloaded under the specified directory.
call plug#begin(has('nvim') ? stdpath('data') . '/plugged' : '~/.vim/plugged')
" Declare the list of plugins.
" Markdown
Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && npx --yes yarn install' }
" Rust
Plug 'github/copilot.vim'

Don't forget to add to the ~/.cargo/config.toml

[target.x86_64-apple-darwin]
rustflags = [
  "-C", "link-arg=-undefined",
  "-C", "link-arg=dynamic_lookup",
]

Also, configure the correct tarantoolctl configuration:

Requirements

brew install libunwind-headers
gh repo clone tarantool/tarantool
cd tarantool

To pass make test

cmake .. \
@darthunix
darthunix / sql.pest
Last active February 19, 2022 16:03
Command = _{ SOI ~ Query ~ EOF }
Query = _{ UnionAll | Select | Values | Insert }
Select = {
^"select" ~ Projection ~ ^"from" ~ Scan ~
(((^"inner" ~ ^"join") | ^"join") ~ InnerJoin ~
^"on" ~ Condition)? ~ (^"where" ~ Selection)?
}
Projection = { ((Asterisk | Column) ~ ("," ~ (Asterisk | Column))*?) }
Column = { Row | Alias | Value | Reference }

Оптимальнее всего отлаживать ORCA отдельно от GPDB через запуск минидампа утилитой gporca_test.

  1. Сохранение минидампа
    set client_min_messages='log';
    set optimizer=on;
    set optimizer_enumerate_plans=on;
    set optimizer_minidump=always;
    set optimizer_enable_constant_expression_evaluation=off;
    
    explain YOUR_QUERY;
1. выключить sip через перезагрузку в режиме восстановления
(зажимаем при загрузке cmd+r, потом в Utils->Terminal пишем `csrutil disable`),
перезапуститься
2. удостовериться, что в sysctl включено сохранение корок через `systemctl -a` (`kern.coredump = 1`)
и на каталог для них есть права записи у пользователя (по-умолчанию файлы пишем в
kern.corefile: /cores/core.%P, на /cores можно дать 777)
3. в сессии, из-под которой запускаем процесс, порождающий корку, выставляем `ulimit -c unlimited`
или просто везде ставим `sudo launchctl limit core unlimited`
./configure --prefix=/Users/darthunix/git/builds/zedstore --with-lz4 --with-llvm --with-includes=/usr/local/opt/lz4/include --with-libraries=/usr/local/opt/lz4/lib
make
make install
mkdir -p demo/data
mkdir -p demo/log
/Users/darthunix/git/builds/zedstore/bin/initdb -D demo/data
/Users/darthunix/git/builds/zedstore/bin/pg_ctl -D demo/data -l logfile start
/Users/darthunix/git/builds/zedstore/bin/pg_ctl -D demo/data stop
@darthunix
darthunix / python_async.txt
Last active October 18, 2023 10:00
Difference between asyncio, multithreading and multiprocessing in Python
Чем асинхронные драйвера отличаются от обычных, блокирующих процесс?
Если кратко, то любой драйвер к базе данных по факту представляет из себя некоторый сетевой протокол обмена, чьи пакеты
проходят через сетевой буфер ОС. Когда процесс запихивает данные в этот буфер, данные могут не поместиться в него целиком
(много запихиваем, или туда еще кто-то положил свои пакеты) и только часть из них влезет в сетевой буфер. ОС по такому
поводу сгенерирует прерывание EAGAIN и в этот момент начинается вся разница. Обычный блокирующий код процесса драйвера не
умеет обрабатывать такое прерывание и планировщик ОС видя, что обработки нет, ставит этот процесс в ожидание и переходит к
другому процессу (планировщики умные). Если же драйвер написано асинхронно, то его процесс умеет обрабатывать это
прерывание (для питона это обработка исключения EAGAIN из модуля errno) и говорит - окей, помечаю, что некий объем данных
их буфера ушел по сети, осталось еще отправить вот эту часть данных, делаю полезную работу дальше (например, пе
./configure --prefix=/Users/darthunix/git/builds/postgres --enable-debug --enable-cassert CFLAGS="-ggdb -Og -O0 -fno-omit-frame-pointer"
make -j8
make -j8 install
mkdir -p demo/data
export PATH=/Users/darthunix/git/builds/postgres/bin:$PATH
initdb -D demo/data
pg_ctl -D demo/data -l demo/pg.log start
pg_ctl -D demo/data stop