]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Avoid a memset() when loading stat4 data. Add instrumentation to the same code.
authordan <Dan Kennedy>
Fri, 13 Dec 2024 18:13:51 +0000 (18:13 +0000)
committerdan <Dan Kennedy>
Fri, 13 Dec 2024 18:13:51 +0000 (18:13 +0000)
FossilOrigin-Name: fa87355f6286be1e92f22a71cbfbfb13d1a478d5fb5b38abedbd78bf903171fa

manifest
manifest.uuid
src/analyze.c
src/sqliteInt.h
src/vdbeaux.c

index 0ddc7c19cfa3f438ae8be35703d94054abb44550..df987ee7fa64599d8ab644b2adb076f0dbc9524c 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Increase\sthe\smaximum\snumber\sof\sarguments\son\san\sSQL\sfunction\sto\s1000\swith\sthe\ncapability\sto\sincrease\sit\sfurther\sup\sto\s32767\susing\sa\scompile-time\soption.
-D 2024-12-12T20:39:56.185
+C Avoid\sa\smemset()\swhen\sloading\sstat4\sdata.\sAdd\sinstrumentation\sto\sthe\ssame\scode.
+D 2024-12-13T18:13:51.565
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -707,7 +707,7 @@ F sqlite3.1 acdff36db796e2d00225b911d3047d580cd136547298435426ce9d40347973cc
 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
 F sqlite_cfg.h.in baf2e409c63d4e7a765e17769b6ff17c5a82bbd9cbf1e284fd2e4cefaff3fcf2
 F src/alter.c aa93e37e4a36a0525bbb2a2aeda20d2018f0aa995542c7dc658e031375e3f532
-F src/analyze.c 7a197e6a52d4c16ece9fd01fdaeffdb78b3daa1eddab76036c4beb599a57706e
+F src/analyze.c b927896d0982b91632030982cc727608f8c682ab0279c1f6b33f01e3928e7714
 F src/attach.c 08235ab62ed5ccc93c22bf36e640d19effcd632319615851bccf724ec9341333
 F src/auth.c 4c1ea890e0069ad73bead5d17a5b12c34cfa4f1a24175c8147ea439b64be271c
 F src/backup.c 5c97e8023aab1ce14a42387eb3ae00ba5a0644569e3476f38661fa6f824c3523
@@ -779,7 +779,7 @@ F src/shell.c.in 40de636c1d90fb8a9ca7f49dc8f50d930f1b60736e73aca5eb37c4c7d0e47f9
 F src/sqlite.h.in b7ff496637807ae88b2557039fc940518db328bf5d5621e2f7c048dfba32a52b
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54
-F src/sqliteInt.h 4e8896f6baa07faeda8182ef5caca178eaa1c10e1e5eb4a1983e5ac55fb84256
+F src/sqliteInt.h d3964f3cdf1006e10864226d8698575e18a4cc2072052684083a1ce127c97046
 F src/sqliteLimit.h da2cffdffa7d71b035f9e59668fbaad74b5939300dbfa9915304e6d8f72b0761
 F src/status.c cb11f8589a6912af2da3bb1ec509a94dd8ef27df4d4c1a97e0bcf2309ece972b
 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@ -849,7 +849,7 @@ F src/vdbe.c fa31aa6525e34b51763702d246a69c3877436f0bbf6be5f6351cdcb770b9b7ab
 F src/vdbe.h b74bfd9cb1fa895e545a5286ee1cac6d75f706d325f89be0e3bf3c5107eb8a78
 F src/vdbeInt.h 75373833a8178a78126625dda269bcd41db40547092114d1edff12e7bcbb1606
 F src/vdbeapi.c 80235ac380e9467fec1cb0883354d841f2a771976e766995f7e0c77f845406df
-F src/vdbeaux.c ad80e779f4bf685742fc2d98cb9b802a79d427a4b20f961583f0bcdf8ebcf1fe
+F src/vdbeaux.c a5250f3c1b4a7add56a1d0f7343a41ede2c0d4042f5135ee75cf628cf050fe7d
 F src/vdbeblob.c 255be187436da38b01f276c02e6a08103489bbe2a7c6c21537b7aecbe0e1f797
 F src/vdbemem.c 831a244831eaa45335f9ae276b50a7a82ee10d8c46c2c72492d4eb8c98d94d89
 F src/vdbesort.c d0a3c7056c081703c8b6d91ad60f17da5e062a5c64bf568ed0fa1b5f4cae311f
@@ -2250,9 +2250,8 @@ F vsixtest/vsixtest.tcl 6195aba1f12a5e10efc2b8c0009532167be5e301abe5b31385638080
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 9dde0365cb1df8bded58791f6409db464c969a61bc3a1a5682b4c4438c36a598
-Q +e8d7d68ba0bb0bc2f948db5d9966990a5d23597fc3658b7cd0bc99d53c7353a9
-R 0f00340254ec757d7293a2fab781a175
-U drh
-Z b5be36f6e57315edb37046686085d1ab
+P 3c25c69c93e55738cdbfdd87fa3c879b878674973955490770f5e274da1ca9a4
+R 6dd6638c622e4fc0acf34660a1e4b6d7
+U dan
+Z 5de3a82d9a785cefee51329773e29e7c
 # Remove this line to create a well-formed Fossil manifest.
index 4a47e3ed96b0f2f059c84265138b9be27935aec3..10e07e66455c69eaad584323178bfded956bd0eb 100644 (file)
@@ -1 +1 @@
-3c25c69c93e55738cdbfdd87fa3c879b878674973955490770f5e274da1ca9a4
+fa87355f6286be1e92f22a71cbfbfb13d1a478d5fb5b38abedbd78bf903171fa
index 7d466b90063928ecc916d82cb29c6e58767e9763..c1c3b27b8904eeecd8eed403a528f82beefdf30e 100644 (file)
@@ -1550,6 +1550,9 @@ static void decodeIntArray(
 #endif
     if( *z==' ' ) z++;
   }
+  if( aOut ){
+    for(/* no-op */; i<nOut; i++){ aOut[i] = 0; }
+  }
 #ifndef SQLITE_ENABLE_STAT4
   assert( pIndex!=0 ); {
 #else
@@ -1774,6 +1777,7 @@ static int growSampleArray(sqlite3 *db, Index *pIdx){
   tRowcnt *pSpace; /* Available allocated memory space */
   u8 *pPtr;        /* Available memory as a u8 for easier manipulation */
   int i;
+  u64 t;
 
   /* In production set the initial allocation to SQLITE_STAT4_SAMPLES. This
   ** means that reallocation will almost never be required. But for debug 
@@ -1793,8 +1797,14 @@ static int growSampleArray(sqlite3 *db, Index *pIdx){
   nByte += sizeof(tRowcnt) * nIdxCol * 3 * nNew;
   nByte += nIdxCol * sizeof(tRowcnt);   /* Space for Index.aAvgEq[] */
 
-  aNew = (IndexSample*)sqlite3DbMallocZero(db, nByte);
+  if( db->aSchemaTime ){
+    t = sqlite3STimeNow();
+  }
+  aNew = (IndexSample*)sqlite3DbMallocRaw(db, nByte);
   if( aNew==0 ) return SQLITE_NOMEM_BKPT;
+  if( db->aSchemaTime ){
+    db->aSchemaTime[SCHEMA_TIME_STAT4_SAMPLE_MALLOC] += (sqlite3STimeNow() - t);
+  }
 
   pPtr = (u8*)aNew;
   pPtr += ROUND8(nNew*sizeof(pIdx->aSample[0]));
index 7f7b48e7b4e5f40e8fbe43408a6495910bfa3ed9..2817de3c87e9faebbbab2893a8d83ca2fc2e3686 100644 (file)
@@ -1872,13 +1872,14 @@ struct sqlite3 {
 #define SCHEMA_TIME_STAT4_Q1_BODY 14
 #define SCHEMA_TIME_AFTER_STAT4_Q1 15
 #define SCHEMA_TIME_STAT4_Q2_BODY 16
-#define SCHEMA_TIME_AFTER_STAT4_Q2 17
-#define SCHEMA_TIME_AFTER_STAT4 18
+#define SCHEMA_TIME_STAT4_SAMPLE_MALLOC 17
+#define SCHEMA_TIME_AFTER_STAT4_Q2 18
+#define SCHEMA_TIME_AFTER_STAT4 19
 
-#define SCHEMA_TIME_END_ANALYZE_LOAD 19
-#define SCHEMA_TIME_FINISH 20
+#define SCHEMA_TIME_END_ANALYZE_LOAD 20
+#define SCHEMA_TIME_FINISH 21
 
-#define SCHEMA_TIME_N 21
+#define SCHEMA_TIME_N 22
 #define SCHEMA_TIME_TIMEOUT (500 * 1000)
 
 
index 27e32cb29af35801e750985c7b2ff5108acc0754..6a40156091ddf23d81bf33c0029ce92d2000cd94 100644 (file)
@@ -5499,7 +5499,7 @@ void sqlite3CommitTimeLog(u64 *aCommit){
       }
       zStr = sqlite3_mprintf("%z%s%s%d%s", zStr, (zStr?", ":""),zHash,iVal,zU);
     }
-    sqlite3_log(SQLITE_WARNING, "slow commit (v=18): (%s)", zStr);
+    sqlite3_log(SQLITE_WARNING, "slow commit (v=19): (%s)", zStr);
     sqlite3_free(zStr);
   }
 }
@@ -5527,7 +5527,7 @@ void sqlite3PrepareTimeLog(const char *zSql, int nSql, u64 *aPrepare){
     }
     if( nByte<0 ){ nByte = sqlite3Strlen30(zSql); }
     sqlite3_log(SQLITE_WARNING, 
-        "slow prepare (v=18): (%s) [%.*s]", zStr, nByte, zSql
+        "slow prepare (v=19): (%s) [%.*s]", zStr, nByte, zSql
     );
     sqlite3_free(zStr);
   }
@@ -5543,12 +5543,13 @@ void sqlite3SchemaTimeLog(u64 *aSchema, const char *zFile){
       if( val!=0 
        && ii!=SCHEMA_TIME_STAT4_Q1_BODY
        && ii!=SCHEMA_TIME_STAT4_Q2_BODY 
+       && ii!=SCHEMA_TIME_STAT4_SAMPLE_MALLOC 
       ){
         val -= i1;
       }
       zStr = sqlite3_mprintf("%z%s%d", zStr, (zStr?", ":""), val);
     }
-    sqlite3_log(SQLITE_WARNING, "slow schema (%s) (v=18): (%s)", zFile, zStr);
+    sqlite3_log(SQLITE_WARNING, "slow schema (%s) (v=19): (%s)", zFile, zStr);
     sqlite3_free(zStr);
   }
 }