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:
alias pid='f(){ ps aux | grep "$1" | grep -v grep | head -1 | awk '\''{print $2}'\''; }; f' |
" 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 .. \
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
.
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 |
Чем асинхронные драйвера отличаются от обычных, блокирующих процесс? | |
Если кратко, то любой драйвер к базе данных по факту представляет из себя некоторый сетевой протокол обмена, чьи пакеты | |
проходят через сетевой буфер ОС. Когда процесс запихивает данные в этот буфер, данные могут не поместиться в него целиком | |
(много запихиваем, или туда еще кто-то положил свои пакеты) и только часть из них влезет в сетевой буфер. ОС по такому | |
поводу сгенерирует прерывание 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