diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/malloc.c | 6 | ||||
-rw-r--r-- | src/sqlite.h.in | 46 | ||||
-rw-r--r-- | src/status.c | 6 | ||||
-rw-r--r-- | src/test_malloc.c | 6 |
4 files changed, 47 insertions, 17 deletions
diff --git a/src/malloc.c b/src/malloc.c index 2518741d7..fa9c88f3c 100644 --- a/src/malloc.c +++ b/src/malloc.c @@ -12,7 +12,7 @@ ** ** Memory allocation functions used throughout sqlite. ** -** $Id: malloc.c,v 1.33 2008/08/01 16:31:14 drh Exp $ +** $Id: malloc.c,v 1.34 2008/08/05 17:53:23 drh Exp $ */ #include "sqliteInt.h" #include <stdarg.h> @@ -312,6 +312,7 @@ void *sqlite3ScratchMalloc(int n){ sqlite3_mutex_leave(mem0.mutex); i *= sqlite3Config.szScratch; sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1); + sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n); p = (void*)&((char*)sqlite3Config.pScratch)[i]; } } @@ -324,6 +325,7 @@ void *sqlite3ScratchMalloc(int n){ scratch_overflow: if( sqlite3Config.bMemstat ){ sqlite3_mutex_enter(mem0.mutex); + sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n); n = mallocWithAlarm(n, &p); if( p ) sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, n); sqlite3_mutex_leave(mem0.mutex); @@ -398,6 +400,7 @@ void *sqlite3PageMalloc(int n){ i = mem0.aPageFree[--mem0.nPageFree]; sqlite3_mutex_leave(mem0.mutex); i *= sqlite3Config.szPage; + sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, n); sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, 1); p = (void*)&((char*)sqlite3Config.pPage)[i]; } @@ -407,6 +410,7 @@ void *sqlite3PageMalloc(int n){ page_overflow: if( sqlite3Config.bMemstat ){ sqlite3_mutex_enter(mem0.mutex); + sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, n); n = mallocWithAlarm(n, &p); if( p ) sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, n); sqlite3_mutex_leave(mem0.mutex); diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 5df36cc97..d22354157 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -30,7 +30,7 @@ ** the version number) and changes its name to "sqlite3.h" as ** part of the build process. ** -** @(#) $Id: sqlite.h.in,v 1.386 2008/08/04 20:13:27 drh Exp $ +** @(#) $Id: sqlite.h.in,v 1.387 2008/08/05 17:53:23 drh Exp $ */ #ifndef _SQLITE3_H_ #define _SQLITE3_H_ @@ -6182,35 +6182,57 @@ int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg); ** this parameter. The amount returned is the sum of the allocation ** sizes as reported by the xSize method in [sqlite3_mem_methods].</dd> ** +** <dt>SQLITE_STATUS_MALLOC_SIZE</dt> +** <dd>This parameter records the largest memory allocation request +** handed to [sqlite3_malloc()] or [sqlite3_realloc()] (or their +** internal equivalents). Only the value returned in the +** *pHighwater parameter to [sqlite3_status()] is of interest. +** The value written into the *pCurrent parameter is undefined.</dd> +** ** <dt>SQLITE_STATUS_PAGECACHE_USED</dt> ** <dd>This parameter returns the number of pages used out of the -** page cache buffer configured using [SQLITE_CONFIG_PAGECACHE]. The +** [pagecache memory allocator] that was configured using +** [SQLITE_CONFIG_PAGECACHE]. The ** value returned is in pages, not in bytes.</dd> ** ** <dt>SQLITE_STATUS_PAGECACHE_OVERFLOW</dt> ** <dd>This parameter returns the number of bytes of page cache ** allocation which could not be statisfied by the [SQLITE_CONFIG_PAGECACHE] -** buffer and where forced to overflow to [sqlite3_malloc()].</dd> +** buffer and where forced to overflow to [sqlite3_malloc()]. The +** returned value includes allocations that overflowed because they +** where too large (they were larger than the "sz" parameter to +** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because +** no space was left in the page cache.</dd> +** +** <dt>SQLITE_STATUS_PAGECACHE_SIZE</dt> +** <dd>This parameter records the largest memory allocation request +** handed to [pagecache memory allocator]. Only the value returned in the +** *pHighwater parameter to [sqlite3_status()] is of interest. +** The value written into the *pCurrent parameter is undefined.</dd> ** ** <dt>SQLITE_STATUS_SCRATCH_USED</dt> ** <dd>This parameter returns the number of allocations used out of the -** scratch allocation lookaside buffer configured using +** [scratch memory allocator] configured using ** [SQLITE_CONFIG_SCRATCH]. The value returned is in allocations, not -** in bytes. Since a single thread may only have one allocation +** in bytes. Since a single thread may only have one scratch allocation ** outstanding at time, this parameter also reports the number of threads ** using scratch memory at the same time.</dd> ** ** <dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt> ** <dd>This parameter returns the number of bytes of scratch memory ** allocation which could not be statisfied by the [SQLITE_CONFIG_SCRATCH] -** buffer and where forced to overflow to [sqlite3_malloc()].</dd> +** buffer and where forced to overflow to [sqlite3_malloc()]. The values +** returned include overflows because the requested allocation was too +** larger (that is, because the requested allocation was larger than the +** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer +** slots were available. +** </dd> ** -** <dt>SQLITE_STATUS_MALLOC_SIZE</dt> +** <dt>SQLITE_STATUS_SCRATCH_SIZE</dt> ** <dd>This parameter records the largest memory allocation request -** handed to [sqlite3_malloc()] or [sqlite3_realloc()] (or their -** internal equivalents). The value of interest is return in the -** *pHighwater parameter to [sqlite3_status()]. The value written -** into the *pCurrent parameter is undefined.</dd> +** handed to [scratch memory allocator]. Only the value returned in the +** *pHighwater parameter to [sqlite3_status()] is of interest. +** The value written into the *pCurrent parameter is undefined.</dd> ** ** <dt>SQLITE_STATUS_PARSER_STACK</dt> ** <dd>This parameter records the deepest parser stack. It is only @@ -6226,6 +6248,8 @@ int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg); #define SQLITE_STATUS_SCRATCH_OVERFLOW 4 #define SQLITE_STATUS_MALLOC_SIZE 5 #define SQLITE_STATUS_PARSER_STACK 6 +#define SQLITE_STATUS_PAGECACHE_SIZE 7 +#define SQLITE_STATUS_SCRATCH_SIZE 8 /* ** CAPI3REF: Status Parameters for database connections {H17275} <H17200> diff --git a/src/status.c b/src/status.c index 56ecdcdb3..a60a8535a 100644 --- a/src/status.c +++ b/src/status.c @@ -13,7 +13,7 @@ ** This module implements the sqlite3_status() interface and related ** functionality. ** -** $Id: status.c,v 1.6 2008/08/01 16:31:14 drh Exp $ +** $Id: status.c,v 1.7 2008/08/05 17:53:23 drh Exp $ */ #include "sqliteInt.h" @@ -21,8 +21,8 @@ ** Variables in which to record status information. */ static struct { - int nowValue[7]; /* Current value */ - int mxValue[7]; /* Maximum value */ + int nowValue[9]; /* Current value */ + int mxValue[9]; /* Maximum value */ } sqlite3Stat; diff --git a/src/test_malloc.c b/src/test_malloc.c index 449cdb291..24d23891e 100644 --- a/src/test_malloc.c +++ b/src/test_malloc.c @@ -13,7 +13,7 @@ ** This file contains code used to implement test interfaces to the ** memory allocation subsystem. ** -** $Id: test_malloc.c,v 1.46 2008/08/04 20:13:27 drh Exp $ +** $Id: test_malloc.c,v 1.47 2008/08/05 17:53:24 drh Exp $ */ #include "sqliteInt.h" #include "tcl.h" @@ -1181,11 +1181,13 @@ static int test_status( int op; } aOp[] = { { "SQLITE_STATUS_MEMORY_USED", SQLITE_STATUS_MEMORY_USED }, + { "SQLITE_STATUS_MALLOC_SIZE", SQLITE_STATUS_MALLOC_SIZE }, { "SQLITE_STATUS_PAGECACHE_USED", SQLITE_STATUS_PAGECACHE_USED }, { "SQLITE_STATUS_PAGECACHE_OVERFLOW", SQLITE_STATUS_PAGECACHE_OVERFLOW }, + { "SQLITE_STATUS_PAGECACHE_SIZE", SQLITE_STATUS_PAGECACHE_SIZE }, { "SQLITE_STATUS_SCRATCH_USED", SQLITE_STATUS_SCRATCH_USED }, { "SQLITE_STATUS_SCRATCH_OVERFLOW", SQLITE_STATUS_SCRATCH_OVERFLOW }, - { "SQLITE_STATUS_MALLOC_SIZE", SQLITE_STATUS_MALLOC_SIZE }, + { "SQLITE_STATUS_SCRATCH_SIZE", SQLITE_STATUS_SCRATCH_SIZE }, { "SQLITE_STATUS_PARSER_STACK", SQLITE_STATUS_PARSER_STACK }, }; Tcl_Obj *pResult; |