From c585e03a4b15fc2c7e38ff4599cbbda4937453e4 Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 19 Jul 2025 18:17:06 +0000 Subject: [PATCH] Use fewer CPU cycles to commit a read transaction. FossilOrigin-Name: 861e55656abb208b4f1f2c8808c76c0454427af85a8930ab53f9c053605f39c7 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/vdbeaux.c | 14 +++++++++----- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index b9602f1fec..553c8345e1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sSQLITE_SELFORDER1\sto\sJS's\ssqlite3.capi\snamespace.\sIt's\sonly\suseful\swhen\sbuilt\swith\san\ssqlite3.c\swhich\sitself\swas\screated\swith\s-DSQLITE_ENABLE_ORDERED_SET_AGGREGATES,\swhich\sthe\scanonical\sbuild\sdoes\snot\sdo\sbut\scustom\sbuilds\smay. -D 2025-07-18T22:18:41.955 +C Use\sfewer\sCPU\scycles\sto\scommit\sa\sread\stransaction. +D 2025-07-19T18:17:06.185 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -857,7 +857,7 @@ F src/vdbe.c e505b8b879a330e8dafbe3ed9582eae2fc671b44a64748d1b58c07e4e0f527da F src/vdbe.h ea1f1b52f0efe422f80d88da3c57e4eadc72856e29a22f1ff08e502ec6ba5f08 F src/vdbeInt.h 626465ff6d673f73a2476dc230b7cd07bdaf4acea9d4ecceaa12a5174bb2c8d7 F src/vdbeapi.c f9a4881a9674fec3fa13da35044a1484d3c4b95f9ec891cc8ffb02ef2b7a41df -F src/vdbeaux.c ed06d2892e830b7ad158f81b2b610c918fbb36a0b717b48d299daca80e8264c6 +F src/vdbeaux.c 933a024b84154776b6b8d01f0de266d6d512530962e9793cf90fe1be5bb3697a F src/vdbeblob.c b3f0640db9642fbdc88bd6ebcc83d6009514cafc98f062f675f2c8d505d82692 F src/vdbemem.c e67d9c6484d868c879d20c70d00bf4a9058082f1d4058607ca15d50eb3aebc21 F src/vdbesort.c cb6f472e83ca12c46aa7de0ac0a9d11458b357986f2617a1c90dfb19a542ecbe @@ -2213,8 +2213,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P b66fcb61a1d044fa18419ab382a8b159e9b6bb52956917d8a9de4dccf8dc9a87 -R e47f8ee81c414bf3cf4be52d123f908b -U stephan -Z d279856fb215404c8ca1d35b06ec79fb +P fdd15e938ccfac9e871d781d1c8fe8be6dbd9e8cbbcb8b7f0b035e5ceebb8746 +R 5e8f8aa890f0c52df0b513b08f31622c +U drh +Z 7befb42110fb8e7ba3c32234f7f25e7b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index e7feb037ad..6a3fe4ae0a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fdd15e938ccfac9e871d781d1c8fe8be6dbd9e8cbbcb8b7f0b035e5ceebb8746 +861e55656abb208b4f1f2c8808c76c0454427af85a8930ab53f9c053605f39c7 diff --git a/src/vdbeaux.c b/src/vdbeaux.c index b1406724ed..3c8e18393f 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -2994,10 +2994,12 @@ static int vdbeCommit(sqlite3 *db, Vdbe *p){ if( 0==sqlite3Strlen30(sqlite3BtreeGetFilename(db->aDb[0].pBt)) || nTrans<=1 ){ - for(i=0; rc==SQLITE_OK && inDb; i++){ - Btree *pBt = db->aDb[i].pBt; - if( pBt ){ - rc = sqlite3BtreeCommitPhaseOne(pBt, 0); + if( needXcommit ){ + for(i=0; rc==SQLITE_OK && inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( sqlite3BtreeTxnState(pBt)>=SQLITE_TXN_WRITE ){ + rc = sqlite3BtreeCommitPhaseOne(pBt, 0); + } } } @@ -3008,7 +3010,9 @@ static int vdbeCommit(sqlite3 *db, Vdbe *p){ */ for(i=0; rc==SQLITE_OK && inDb; i++){ Btree *pBt = db->aDb[i].pBt; - if( pBt ){ + int txn = sqlite3BtreeTxnState(pBt); + if( txn!=SQLITE_TXN_NONE ){ + assert( needXcommit || txn==SQLITE_TXN_READ ); rc = sqlite3BtreeCommitPhaseTwo(pBt, 0); } } -- 2.47.2