Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Comment improvements in pcache1.c. No changes to code. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
9660a0a22547656cc3765b673d0cee9e |
User & Date: | drh 2011-01-19 21:58:56.344 |
Context
2011-01-21
| ||
15:52 | Add options to test command [do_faultsim_test] to support testing VFS implementations. (check-in: 503ad889da user: dan tags: trunk) | |
2011-01-20
| ||
02:56 | The first of a planned series of enhancements to the query planner that enable it to make better use of sqlite_stat2 histograms when the table has many repeated values. (check-in: 2cd374cd23 user: drh tags: stat2-enhancement) | |
2011-01-19
| ||
21:58 | Comment improvements in pcache1.c. No changes to code. (check-in: 9660a0a225 user: drh tags: trunk) | |
2011-01-18
| ||
17:03 | Do not use mutexes in the pcache implementation unless SQLITE_ENABLE_MEMORY_MANAGMENT is defined. This is a performance enhancement. A side effect is that pcaches will not steal pages from one another unless ENABLE_MEMORY_MANAGEMENT is set, or unless SQLITE_THREADSAFE=0. (check-in: e5ca59e63b user: drh tags: trunk) | |
Changes
Changes to src/pcache1.c.
︙ | ︙ | |||
670 671 672 673 674 675 676 | PGroup *pGroup = pCache->pGroup; PgHdr1 *pPage = 0; assert( pCache->bPurgeable || createFlag!=1 ); pcache1EnterMutex(pGroup); if( createFlag==1 ) sqlite3BeginBenignMalloc(); | | > | | | 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 | PGroup *pGroup = pCache->pGroup; PgHdr1 *pPage = 0; assert( pCache->bPurgeable || createFlag!=1 ); pcache1EnterMutex(pGroup); if( createFlag==1 ) sqlite3BeginBenignMalloc(); /* Step 1: Search the hash table for an existing entry. */ if( pCache->nHash>0 ){ unsigned int h = iKey % pCache->nHash; for(pPage=pCache->apHash[h]; pPage&&pPage->iKey!=iKey; pPage=pPage->pNext); } /* Step 2: Abort if no existing page is found and createFlag is 0 */ if( pPage || createFlag==0 ){ pcache1PinPage(pPage); goto fetch_out; } /* Step 3: Abort if createFlag is 1 but the cache is nearly full */ nPinned = pCache->nPage - pCache->nRecyclable; if( createFlag==1 && ( nPinned>=(pGroup->nMaxPage+pCache->nMin-pGroup->nMinPage) || nPinned>=(pCache->nMax * 9 / 10) || pcache1UnderMemoryPressure(pCache) )){ goto fetch_out; } if( pCache->nPage>=pCache->nHash && pcache1ResizeHash(pCache) ){ goto fetch_out; } /* Step 4. Try to recycle a page. */ if( pCache->bPurgeable && pGroup->pLruTail && ( (pCache->nPage+1>=pCache->nMax) || pGroup->nCurrentPage>=pGroup->nMaxPage || pcache1UnderMemoryPressure(pCache) )){ pPage = pGroup->pLruTail; pcache1RemoveFromHash(pPage); |
︙ | ︙ |