Update of /project/elephant/cvsroot/elephant/src/db-bdb In directory clnet:/tmp/cvs-serv4997/src/db-bdb
Modified Files: bdb-collections.lisp bdb-controller.lisp bdb-transactions.lisp berkeley-db.lisp libberkeley-db.c Log Message: Export bdb performance tweaks; lots more documentation; new ops for libberkeley-db
--- /project/elephant/cvsroot/elephant/src/db-bdb/bdb-collections.lisp 2007/04/12 02:47:23 1.22 +++ /project/elephant/cvsroot/elephant/src/db-bdb/bdb-collections.lisp 2007/04/25 02:27:58 1.23 @@ -676,8 +676,7 @@ (error "cursor-get-both-range not implemented on secondary indices. Use cursor-pget-both-range."))
(defmethod cursor-put ((cursor bdb-secondary-cursor) value &rest rest) - "Puts are forbidden on secondary indices. Try adding to -the primary." + "Puts are forbidden on secondary indices. Try adding to the primary." (declare (ignore rest value) (ignorable cursor)) (error "Puts are forbidden on secondary indices. Try adding to the primary.")) --- /project/elephant/cvsroot/elephant/src/db-bdb/bdb-controller.lisp 2007/04/21 17:22:36 1.34 +++ /project/elephant/cvsroot/elephant/src/db-bdb/bdb-controller.lisp 2007/04/25 02:27:58 1.35 @@ -83,13 +83,14 @@ :name "%ELEPHANT"))))) (setf (controller-environment sc) env) (db-env-set-flags env 0 :auto-commit t) + (db-env-set-cachesize env 0 elephant::*berkeley-db-cachesize* 1) + (db-env-set-timeout env 100000 :set-transaction-timeout t) + (db-env-set-timeout env 100000 :set-lock-timeout t) (db-env-open env (namestring (second (controller-spec sc))) :create t :init-rep nil :init-mpool t :thread thread :init-lock t :init-log t :init-txn t :recover recover :recover-fatal recover-fatal ) - (db-env-set-timeout env 100000 :set-transaction-timeout t) - (db-env-set-timeout env 100000 :set-lock-timeout t) (let ((metadata (db-create env)) (db (db-create env)) (btrees (db-create env)) @@ -111,26 +112,30 @@ ;; Open main class, slot-value and index databases (setf (controller-db sc) db) (db-open db :file "%ELEPHANT" :database "%ELEPHANTDB" - :auto-commit t :type DB-BTREE :create t :thread thread) + :auto-commit t :type DB-BTREE :create t :thread thread + :read-uncommitted t)
(setf (controller-btrees sc) btrees) (db-bdb::db-set-lisp-compare btrees (controller-serializer-version sc)) (db-open btrees :file "%ELEPHANT" :database "%ELEPHANTBTREES" - :auto-commit t :type DB-BTREE :create t :thread thread) + :auto-commit t :type DB-BTREE :create t :thread thread + :read-uncommitted t)
(setf (controller-indices sc) indices) (db-bdb::db-set-lisp-compare indices (controller-serializer-version sc)) (db-bdb::db-set-lisp-dup-compare indices (controller-serializer-version sc)) (db-set-flags indices :dup-sort t) (db-open indices :file "%ELEPHANT" :database "%ELEPHANTINDICES" - :auto-commit t :type DB-BTREE :create t :thread thread) + :auto-commit t :type DB-BTREE :create t :thread thread + :read-uncommitted t)
(setf (controller-indices-assoc sc) indices-assoc) (db-bdb::db-set-lisp-compare indices-assoc (controller-serializer-version sc)) (db-bdb::db-set-lisp-dup-compare indices-assoc (controller-serializer-version sc)) (db-set-flags indices-assoc :dup-sort t) (db-open indices-assoc :file "%ELEPHANT" :database "%ELEPHANTINDICES" - :auto-commit t :type DB-UNKNOWN :thread thread) ;; :rdonly t) + :auto-commit t :type DB-UNKNOWN :thread thread + :read-uncommitted t) (db-bdb::db-fake-associate btrees indices-assoc :auto-commit t)
(let ((db (db-create env))) --- /project/elephant/cvsroot/elephant/src/db-bdb/bdb-transactions.lisp 2007/04/12 02:47:23 1.13 +++ /project/elephant/cvsroot/elephant/src/db-bdb/bdb-transactions.lisp 2007/04/25 02:27:58 1.14 @@ -25,7 +25,7 @@ &key transaction parent environment (retries 100) - degree-2 dirty-read txn-nosync txn-nowait txn-sync) + degree-2 read-uncommitted txn-nosync txn-nowait txn-sync) (let ((env (if environment environment (controller-environment sc)))) (loop for count fixnum from 1 to retries @@ -36,7 +36,7 @@ (db-transaction-begin env :parent (if parent parent +NULL-VOID+) :degree-2 degree-2 - :dirty-read dirty-read + :read-uncommitted read-uncommitted :txn-nosync txn-nosync :txn-nowait txn-nowait :txn-sync txn-sync)))) @@ -65,7 +65,7 @@ txn-nosync txn-nowait txn-sync - dirty-read + read-uncommitted degree-2 &allow-other-keys) (assert (not *current-transaction*)) @@ -74,7 +74,7 @@ :txn-nosync txn-nosync :txn-nowait txn-nowait :txn-sync txn-sync - :dirty-read dirty-read + :read-uncommitted read-uncommitted :degree-2 degree-2))
--- /project/elephant/cvsroot/elephant/src/db-bdb/berkeley-db.lisp 2007/04/12 02:47:23 1.11 +++ /project/elephant/cvsroot/elephant/src/db-bdb/berkeley-db.lisp 2007/04/25 02:27:58 1.12 @@ -1526,6 +1526,28 @@ :flags (set-lock-timeout set-transaction-timeout) :documentation "Gets the timout.")
+(def-function ("db_env_set_cachesize" %db-env-set-cachesize) + ((env :pointer-void) + (gbytes :unsigned-int) + (bytes :unsigned-int) + (ncache :int)) + :returning :int) + +(wrap-errno db-env-set-cachesize (env gbytes bytes ncache) + :documentation "Sets the size of the buffer pool cache + for elephant database data. Set large if you can!") + +(def-function ("db_env_get_cachesize" %db-env-get-cachesize) + ((env :pointer-void) + (gbytes :unsigned-int :out) + (bytes :unsigned-int :out) + (ncache :int :out)) + :returning :int) + +(wrap-errno db-env-get-cachesize (env) :outs 4 + :documentation "Return the current cache size of + the BDB environment buffer pool") + (def-function ("db_env_set_lk_detect" %db-env-set-lock-detect) ((env :pointer-void) (detect :unsigned-int)) --- /project/elephant/cvsroot/elephant/src/db-bdb/libberkeley-db.c 2007/04/12 02:47:23 1.11 +++ /project/elephant/cvsroot/elephant/src/db-bdb/libberkeley-db.c 2007/04/25 02:27:58 1.12 @@ -661,6 +661,14 @@ return env->get_timeout(env, timeoutp, flags); }
+int db_env_set_cachesize(DB_ENV *env, u_int32_t gbytes, u_int32_t bytes, int ncache) { + return env->set_cachesize(env, gbytes, bytes, ncache); +} + +int db_env_get_cachesize(DB_ENV *env, u_int32_t *gbytes, u_int32_t *bytes, int *ncache) { + return env->get_cachesize(env, gbytes, bytes, ncache); +} + int db_env_set_lk_detect(DB_ENV *env, u_int32_t detect) { return env->set_lk_detect(env, detect); } @@ -1002,7 +1010,7 @@ #define S2_FILL_POINTER_P 0x40 #define S2_ADJUSTABLE_P 0x80
-#define type_numeric2(c) (((c)<9) || ((c)==14) || ((c)==30)) +#define type_numeric2(c) (((c)<9) || ((c)==22))
/****** Serialized BTree keys have the form: