Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch debug Excluding Merge-Ins
This is equivalent to a diff from 46bd9533 to 9ab53605
2016-08-10
| ||
11:50 | Fix pcache1TruncateUnsafe() run faster for the case where iLimit is very close to iMaxKey. (check-in: b07a26df user: drh tags: trunk) | |
03:35 | Try to make pcache1TruncateUnsafe() run faster for the case where iLimit is very close to iMaxKey. (Leaf check-in: 9ab53605 user: drh tags: debug) | |
02:54 | Remove all timers and other debugging logs except for the one timer on pcache1TruncateUnsafe(). (check-in: 5980e625 user: drh tags: debug) | |
2016-07-16
| ||
11:47 | Temporarily add extra sqlite3_log() calls to this version to help with debugging a performance problem. (check-in: 613c1cea user: dan tags: debug) | |
2016-07-14
| ||
20:19 | Experimental patch restore the slight bias in btree-balancing immediately after the change to reduces the amount of memcpy() work done by balancing. (Leaf check-in: 46bd9533 user: drh tags: btree-balance-bias) | |
2014-10-27
| ||
14:26 | Optimizations aimed at reducing the number of memcpy() operations required by balance_nonroot(). (check-in: face33be user: dan tags: trunk) | |
Changes to src/pcache1.c.
︙ | ︙ | |||
494 495 496 497 498 499 500 | ** ** The PCache mutex must be held when this function is called. */ static void pcache1TruncateUnsafe( PCache1 *pCache, /* The cache to truncate */ unsigned int iLimit /* Drop pages with this pgno or larger */ ){ | | | > > > > > > > > > > > > > > > > | > > | > > > | > > | > > > > > > > | 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 | ** ** The PCache mutex must be held when this function is called. */ static void pcache1TruncateUnsafe( PCache1 *pCache, /* The cache to truncate */ unsigned int iLimit /* Drop pages with this pgno or larger */ ){ TESTONLY( int nPage = 0; ) /* To assert pCache->nPage is correct */ unsigned int h, iStop; START_DEBUG_TIMER; int nFree = 0; assert( sqlite3_mutex_held(pCache->pGroup->mutex) ); assert( pCache->iMaxKey >= iLimit ); assert( pCache->nHash > 0 ); if( pCache->iMaxKey - iLimit < pCache->nHash/2 ){ /* If we are just shaving the last few pages off the end of the ** cache, then there is no point in scanning the entire hash table. ** Only scan those hash slots that might contain pages that need to ** be removed. */ iStop = iLimit % pCache->nHash; h = pCache->iMaxKey % pCache->nHash; TESTONLY( nPage = -10; ) /* Disable the pCache->nPage validity check */ }else{ /* This is the general case where many pages are being removed. ** It is necessary to scan the entire hash table */ iStop = 0; h = pCache->nHash - 1; } for(;;){ PgHdr1 **pp; PgHdr1 *pPage; assert( h<pCache->nHash ); pp = &pCache->apHash[h]; while( (pPage = *pp)!=0 ){ if( pPage->iKey>=iLimit ){ pCache->nPage--; nFree++; *pp = pPage->pNext; if( !pPage->isPinned ) pcache1PinPage(pPage); pcache1FreePage(pPage); }else{ pp = &pPage->pNext; TESTONLY( if( nPage>=0 ) nPage++; ) } } if( h==iStop ) break; h = h ? h-1 : pCache->nHash - 1; } assert( nPage<0 || pCache->nPage==(unsigned)nPage ); END_DEBUG_TIMER( DEBUG_TIMER_BIG_TIMEOUT ){ sqlite3_log(SQLITE_NOTICE, "slow pcache1TruncateUnsafe() %lld " " nFree=%d nHash=%d nPage=%d iLimit=%d iMaxKey=%d", iDebugTimer, nFree, pCache->nHash, pCache->nPage, iLimit, pCache->iMaxKey); } } /******************************************************************************/ /******** sqlite3_pcache Methods **********************************************/ /* ** Implementation of the sqlite3_pcache.xInit method. |
︙ | ︙ | |||
941 942 943 944 945 946 947 | ** Destroy a cache allocated using pcache1Create(). */ static void pcache1Destroy(sqlite3_pcache *p){ PCache1 *pCache = (PCache1 *)p; PGroup *pGroup = pCache->pGroup; assert( pCache->bPurgeable || (pCache->nMax==0 && pCache->nMin==0) ); pcache1EnterMutex(pGroup); | | | 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 | ** Destroy a cache allocated using pcache1Create(). */ static void pcache1Destroy(sqlite3_pcache *p){ PCache1 *pCache = (PCache1 *)p; PGroup *pGroup = pCache->pGroup; assert( pCache->bPurgeable || (pCache->nMax==0 && pCache->nMin==0) ); pcache1EnterMutex(pGroup); if( pCache->nPage ) pcache1TruncateUnsafe(pCache, 0); assert( pGroup->nMaxPage >= pCache->nMax ); pGroup->nMaxPage -= pCache->nMax; assert( pGroup->nMinPage >= pCache->nMin ); pGroup->nMinPage -= pCache->nMin; pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage; pcache1EnforceMaxPage(pGroup); pcache1LeaveMutex(pGroup); |
︙ | ︙ |
Changes to src/sqliteInt.h.
︙ | ︙ | |||
195 196 197 198 199 200 201 | /* ** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1. ** It determines whether or not the features related to ** SQLITE_CONFIG_MEMSTATUS are available by default or not. This value can ** be overridden at runtime using the sqlite3_config() API. */ #if !defined(SQLITE_DEFAULT_MEMSTATUS) | | | 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | /* ** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1. ** It determines whether or not the features related to ** SQLITE_CONFIG_MEMSTATUS are available by default or not. This value can ** be overridden at runtime using the sqlite3_config() API. */ #if !defined(SQLITE_DEFAULT_MEMSTATUS) # define SQLITE_DEFAULT_MEMSTATUS 0 #endif /* ** Exactly one of the following macros must be defined in order to ** specify which memory allocation subsystem to use. ** ** SQLITE_SYSTEM_MALLOC // Use normal system malloc() |
︙ | ︙ | |||
3810 3811 3812 3813 3814 3815 3816 3817 3818 | /* ** Threading interface */ #if SQLITE_MAX_WORKER_THREADS>0 int sqlite3ThreadCreate(SQLiteThread**,void*(*)(void*),void*); int sqlite3ThreadJoin(SQLiteThread*, void**); #endif #endif /* _SQLITEINT_H_ */ | > > > > > > > > > > > > > > > > > > > > > | 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 | /* ** Threading interface */ #if SQLITE_MAX_WORKER_THREADS>0 int sqlite3ThreadCreate(SQLiteThread**,void*(*)(void*),void*); int sqlite3ThreadJoin(SQLiteThread*, void**); #endif #include <sys/time.h> #define START_DEBUG_TIMER \ sqlite3_uint64 iDebugTimerStart, iDebugTimer; \ struct timeval debug_timer_var; \ gettimeofday(&debug_timer_var, 0); \ iDebugTimerStart = 1000000*(sqlite3_uint64)debug_timer_var.tv_sec \ + debug_timer_var.tv_usec; #define END_DEBUG_TIMER(nDebugUsec) \ gettimeofday(&debug_timer_var, 0); \ iDebugTimer = 1000000*(sqlite3_uint64)debug_timer_var.tv_sec \ +debug_timer_var.tv_usec-iDebugTimerStart; \ if( iDebugTimer>=nDebugUsec ) #ifndef DEBUG_TIMER_BIG_TIMEOUT # define DEBUG_TIMER_BIG_TIMEOUT 10000 #endif #ifndef DEBUG_TIMER_SMALL_TIMEOUT # define DEBUG_TIMER_SMALL_TIMEOUT 1000 #endif #endif /* _SQLITEINT_H_ */ |