From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp57.i.mail.ru (smtp57.i.mail.ru [217.69.128.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 14F9446970E for ; Mon, 30 Dec 2019 04:13:21 +0300 (MSK) Date: Mon, 30 Dec 2019 03:13:18 +0200 From: Nikita Pettik Message-ID: <20191230011318.GA29831@tarantool.org> References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: Subject: Re: [Tarantool-patches] [PATCH v3 00/20] sql: prepared statements List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: tarantool-patches@dev.tarantool.org On 20 Dec 15:47, Nikita Pettik wrote: I've pushed all preliminary patches to master (I've fixed Sergos's nits for current version and Vlad's and Konstantin's comments for previous patch version). > Branch: https://github.com/tarantool/tarantool/tree/np/gh-2592-prepared-statements-v3 > Issue: https://github.com/tarantool/tarantool/issues/2592 > > V1: https://lists.tarantool.org/pipermail/tarantool-patches/2019-November/012274.html > V2: https://lists.tarantool.org/pipermail/tarantool-patches/2019-November/012496.html > > Changes in V3 (requested by server team): > > - Now there's no eviction policy, so statements reside in 'cache' > until explicit deallocation via 'unprepare' call or session's > disconect; > - instead of string ids, now we use numeric ids which correspond > to value of hash function applied to the string containing original > SQL request; > - in accordance with previous point, 'unprepare' support has been returned; > - since there's no eviction policy, disconnect event may turn out to > be expensive (in terms of deallocating all related to the session > prepared statements). To remove possible spikes in workload, we > maintain GC queue and reference counters for prepared statements. > When all sessions (previously refed statement) unref it, statement > gets into GC queue. In case of prepared statements holder is out > of memory, GC process is launched: all statements in queue are > deallocated; > - to track available in scope of session prepared statements, we > also maintain session-local map containing statement's IDs > allocated in this session. > > Nikita Pettik (20): > sql: remove sql_prepare_v2() > sql: refactor sql_prepare() and sqlPrepare() > sql: move sql_prepare() declaration to box/execute.h > sql: rename sqlPrepare() to sql_stmt_compile() > sql: rename sql_finalize() to sql_stmt_finalize() > sql: rename sql_reset() to sql_stmt_reset() > sql: move sql_stmt_finalize() to execute.h > port: increase padding of struct port > port: add result set format and request type to port_sql > sql: resurrect sql_bind_parameter_count() function > sql: resurrect sql_bind_parameter_name() > sql: add sql_stmt_schema_version() > sql: introduce sql_stmt_sizeof() function > box: increment schema_version on ddl operations > sql: introduce sql_stmt_query_str() method > sql: move sql_stmt_busy() declaration to box/execute.h > sql: introduce holder for prepared statemets > box: introduce prepared statements > netbox: introduce prepared statements > sql: add cache statistics to box.info > > src/box/CMakeLists.txt | 1 + > src/box/alter.cc | 3 + > src/box/bind.c | 2 +- > src/box/box.cc | 26 ++ > src/box/box.h | 3 + > src/box/ck_constraint.c | 7 +- > src/box/errcode.h | 2 + > src/box/execute.c | 234 ++++++++++++- > src/box/execute.h | 60 ++++ > src/box/iproto.cc | 68 +++- > src/box/iproto_constants.c | 7 +- > src/box/iproto_constants.h | 5 + > src/box/lua/cfg.cc | 9 + > src/box/lua/execute.c | 235 ++++++++++++- > src/box/lua/execute.h | 2 +- > src/box/lua/info.c | 25 ++ > src/box/lua/init.c | 2 +- > src/box/lua/load_cfg.lua | 3 + > src/box/lua/net_box.c | 98 +++++- > src/box/lua/net_box.lua | 27 ++ > src/box/session.cc | 35 ++ > src/box/session.h | 17 + > src/box/sql.c | 3 + > src/box/sql/analyze.c | 23 +- > src/box/sql/legacy.c | 3 +- > src/box/sql/prepare.c | 56 +-- > src/box/sql/sqlInt.h | 51 +-- > src/box/sql/vdbe.c | 4 +- > src/box/sql/vdbe.h | 2 +- > src/box/sql/vdbeInt.h | 1 - > src/box/sql/vdbeapi.c | 113 ++++-- > src/box/sql/vdbeaux.c | 6 +- > src/box/sql_stmt_cache.c | 305 +++++++++++++++++ > src/box/sql_stmt_cache.h | 153 +++++++++ > src/box/xrow.c | 23 +- > src/box/xrow.h | 4 +- > src/lib/core/port.h | 2 +- > test/app-tap/init_script.result | 37 +- > test/box/admin.result | 2 + > test/box/cfg.result | 7 + > test/box/cfg.test.lua | 1 + > test/box/info.result | 1 + > test/box/misc.result | 5 + > test/sql/engine.cfg | 4 + > test/sql/iproto.result | 2 +- > test/sql/prepared.result | 737 ++++++++++++++++++++++++++++++++++++++++ > test/sql/prepared.test.lua | 282 +++++++++++++++ > 47 files changed, 2503 insertions(+), 195 deletions(-) > create mode 100644 src/box/sql_stmt_cache.c > create mode 100644 src/box/sql_stmt_cache.h > create mode 100644 test/sql/prepared.result > create mode 100644 test/sql/prepared.test.lua > > -- > 2.15.1 >