Subject: | Oracle Database and the Windows NT memory architecture, Technical Bulletin | |||
Note:46001.1 | Type: | BULLETIN | ||
Last Revision Date: | 18-APR-2006 | Status: | PUBLISHED | |
1. Purpose========== This note explains how Oracle interacts with Windows NT's memory architecture,see "Note 46053.1 Windows NT Memory Architecture Overview", for additionalinformation about NT's memory architecture. 2. How the Oracle Process interacts with the Windows NT memory architecture=========================================================================== a) Total addressable memory per database---------------------------------------- On Windows NT an Oracle instance runs as a single process, this process is astandard Win32 application that is able to make memory allocations from the2GB virtual address space. All memory allocations made by all user connectionsand background threads have to fit into 2GBs including global allocations suchas the buffer cache. For systems that have either large user populations orbuffer cache requirements this presents a problem, later in this note wediscuss reducing the impact of this problem. Although the ultimate solutionwill come when Windows supports a 64-Bit virtual address model. b) Configuring Windows NT memory for the Oracle process------------------------------------------------------- PDC / BDC : The Oracle database will run on all editions and many configurations ofWindows NT, but Oracle does not normally recommend customers run it on Primaryand Backup Domain Controllers (PDC/BDC). The main reason for this is becausedomain controllers tend to require larger file caches (which reduces memoryavailable to the database) and network resources, Oracle would recommend : If you plan to install the Oracle database on either a PDC or BDC you shouldre-review the hardware choices you made in capacity planning. You shouldaccount for the additional overhead that is incurred by the domain controllerservices. In large networks running on Windows NT, substantial resources canbe required by domain controllers for performing directory-replication andserver-authentication for clients. However, if you have a very small networkin which account information rarely changes and in which users do not log onand off frequently, you should be able to run Oracle without encounteringunder resourcing issues. Windows NT File Cache Size : Another common question relates to the Windows NT file cache, when runningthe machine as a dedicated database server or as a mixed usage server. Thefirst point to note is that the Oracle database does not use the file cache,it writes direct to disk avoiding the Windows NT file cache and manages datacaching independently. When Windows NT is installed the LAN Manager Server ("Server" in the listof installed network software/services in Control Panel) is set to "MaximizeThroughput for File Sharing". The LAN manager server service is generallyresponsible for named pipes, file and print services. These services cancause considerable memory allocations to be made for internal buffers andtables depending on the amount of physical memory installed. It also affectsthe size of the file cache depending on what its optimisation parameter isset to. Choosing the appropriate optimisation parameter depends on the type of systemyou have, dedicated database server or mixed usage server. For systems thatrun a mix of applications or are domain controllers the default setting willprobably be the best compromise. This may also be true for dedicated databaseservers where named pipes is the preferred SQL*Net protocol, because namedpipes is the only inter-process communications mechanism to use the serverservice. If the optimisation is set to "Maximize Throughput for File Sharing" WindowsNT sets a very high maximum size for the file cache working set, which is notdesirable for dedicated database servers using TCP/IP Sockets as the SQL*Netconnectivity protocol. Generally customers should set the optimisation to"Maximize Throughput for Network Applications" because it favours the workingset of processes over the working set of the file system cache. But if theserver service is not being used at all on dedicated database servers it willbe better to set the optimisation to "Minimize Memory Used", because itfavours the process working set over the file system cache in the same way andminimizes the internal buffers that are created. The above settings do not apply to Windows NT Workstation. Page File Size : On systems that run as dedicated Oracle database servers customers shouldstrive to ensure that the pagefile is not used at all. This can be achievedby reducing the relevant init.ora parameters or by increasing physical memory.If a large number of pages are continually moving to and from the pagefileperformance of the database will be very poor. When running as a dedicated Oracle database server we would make the followingrecommendations : - If the total memory allocated by Oracle can be guaranteed not to exceed physical memory, the pagefile can be set to 50% of physical memory with the ability to grow to 100%. - For the majority of Windows NT servers running purely Oracle databases we would normally recommend the pagefile be between one and one and a half times physical memory on the machine. - For machines with greater than 2GB of main memory, a 2GB pagefile should be adequate. The total memory that can be allocated (commit limit) on a machine is equalto : physical memory plus pagefile size before extension. Customers shouldavoid setting parameters such as db_block_buffers, or combinations of init.oraparameters to exceed physical memory. This is allowed as long as it is withinthe commit limit, but as pages are accessed more and more paging will occur,which will in turn degrade systems performance. For example if a machine has1GB of physical memory / 1GB pagefile and db_block_buffers are set to 1.2GBwe will commit all these pages without error, but as we access more than 1GBworth of the buffer cache, pages will be swapped in and out causing poorperformance. If the buffer cache hit ratio is high db_block_buffers can bedecreased, where as if it is low more memory should be added. On systems that have a mix of applications running concurrently, some of whichmay be idle for a period of time, the size of the pagefile may need to beconsiderably larger than physical memory. Processes that are not currentlyin use will have their working sets reduced to allow active processes workingsets to be increased. If Oracle is running in such an environment we wouldrecommend that the pagefile be at least 1.5 to 2 or more time the physicalmemory of the machine. This may even be necessary when memory is greaterthan 2GB. c) Altering the way that the Oracle process interacts with memory----------------------------------------------------------------- Prior to Oracle 8.1.x starting the Oracle Service did not start the DatabaseInstance, when the Service is started but the instance is not the majorityof the memory associated with the ORACLE.EXE process is the memory mappeddll's, this may be as much as 20MB. On starting up an Oracle instance allglobal memory pages are reserved and committed (Total Shared Global Area,Buffer Cache and Redo Buffers). Only a small number of these memory pages aretouched on startup and are thus not in Oracle's working set, as more pages aretouched they will be brought into memory. Oracle must contend equally withother processes and will have its working set trimmed if other processes arefaulting at a greater rate. It is unlikely that this trimming will be desirable, especially when thedatabase has a varying workload (high and low usage periods). Two registryparameters exist to allow the administrator to manipulate the working set bounds of the Oracle process, these are : - ORA_WORKINGSETMIN or ORA_%SID%_WORKINGSETMIN : Minimum working set for the ORACLE.EXE process (units = MB) - ORA_WORKINGSETMAX or ORA_%SID%_WORKINGSETMAX : Maximum working set for the ORACLE.EXE process (units = MB) These parameters apply to all releases from 7.3.x and should be added to theregistry under : HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE or HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE -> HOMEx (for multiple homes) The main benefit of setting these parameters will be in environments whereOracle coexists with other applications. Although it can be beneficial inenvironments which run production and test instances on the same machine, theproduction instance can use a large ORA_%SID%_WORKINGSETMIN to ensure thattest instances do not cause working set trimming of production instances. Customers who are using these registry entries should consider using them incombination with the init.ora parameter PRE_PAGE_SGA, which causes Oracle totouch all the SGA pages (including the buffer cache), bringing them into theworking set of the Oracle executable. This increases instance startup time butallows the instance to reach its maximum performance capability quickly,rather than through an incremental build up as pages are loaded. ORA_WORKINGSETMIN is the most useful parameter and prevents the working setof the Oracle process from dropping below the threshold until the instanceis shutdown : a) If used in combination with PRE_PAGE_SGA, the working set will start above the minimum threshold and not drop below.b) If ORA_WORKINGSETMIN is used in isolation, then once the working set rises above the threshold it will not drop below. Always use these parameters with caution, because they change NT's defaultbehaviour. Before using these parameters, ensure that the page file islarge enough and remember that pages above the minimum threshold can stillbe paged out. 3. Database global memory allocations===================================== a) Database parameters---------------------- All memory allocations made by an Oracle instance are limited by the processaddress space as described in section 2.a. This means that the total memoryavailable to parameters described in this section can not exceed 2GB unlessthe server has been configured as described in sections 3.d or 3.e. Inproduction systems users sessions will also be making allocations from thisaddress space which will further restrict the memory available to theseparameters. The following table defines the main init.ora parameters that cause globalallocations within the oracle process and their restrictions : +--------------------------+-------------------------------------+ | Parameter | Maximum values | +--------------------------+-------------------------------------+ | buffer_pool_keep | 4GB / db_block_size - other buffers | | buffer_pool_recycle | 4GB / db_block_size - other buffers | | db_block_buffers | 4GB / db_block_size - buffer pools | +--------------------------+-------------------------------------+ | log_buffer | defaults to 500k maximum 4GB | +--------------------------+-------------------------------------+ | java_pool_size | 1GB | | shared_pool_size | 4GB | | large_pool_size | 4GB | +--------------------------+-------------------------------------+ | shared_memory_address | Not applicable to Windows NT | | hi_shared_memory_address | Not applicable to Windows NT | +--------------------------+-------------------------------------+ The memory available to all these parameters added together can never exceedthe available address space and can be described as : Total Available for =
- -
Global Allocations A common question asked by customers is, how large can I set db_block_buffersto ? Below is an example for a system running with 50 users and a 4K blocksize : Address Space : 2,000,000,000 Average Code Size : 50,000,000 - java_pool_size : 0 - shared_pool_size : 50,000,000 - large_pool_size : 0 - Session Memory : 150,000,000 - (50 users with average session = 3MB) -------------- db_block_buffers = 1,750,000,000 / 4096 = 427,200 Prior to 8.1.5 the Getting Started Guide for Windows NT stated that thedb_block_buffers parameter was restricted to 3200, this is not correct andis documented in Bug 705601. Please note it may not be possible to achieveexactly the number of user sessions listed above due to address spacefragmentation described in section 4. b) Locking the SGA in memory---------------------------- The ability to lock the SGA in memory is provided by Oracle on a number ofplatforms with the LOCK_SGA and LOCK_SGA_AREAS (obsolete in 8.1) init.oraparameters. This feature is not available on Windows NT and will cause startupto return ORA-27102, this is documented in Bug 642267. It is unlikely that locking the SGA in memory would have much benefit oversetting the working set as described in 2.c, because it would not influencememory allocated to users sessions which could still be swapped out. c) How global allocations are performed--------------------------------------- When the database starts up Oracle creates a contiguous memory region in the virtual address space for each parameter listed in section 3.a. This memoryis always reserved and committed, using the Win32 API call "VirtualAlloc" withthe MEM_RESERVE | MEM_COMMIT allocation flags and using the PAGE_READWRITEprotection flag. This ensures that all threads can access the memory and all pages in the region will be backed by physical storage (memory or disk).VirtualAlloc does not touch pages in the region, meaning that the pagesallocated for parameters such as db_block_buffers will not be in the workingset of the process until touched. The Java pool introduced in Oracle 8.1 hasto be initialised and all pages defined in java_pool_size are brought into the processes working set. The buffer cache / buffer pools are usually created as single contiguousregions, but they do not have to be. This is especially important when usinglarge buffer caches because the virtual address space will be fragmented bydll's and thread allocations. System Dll's are usually loaded high around the2GB boundary, which will prevent a single region being created, especiallywhen using the 4GT option described in section 3.d. To get around this problemOracle8 repeatedly retries to create sub areas half the size of the previousuntil the entire cache is allocated. A problem (Bug 943211) has been identified with the above algorithm which willaffect customers trying to allocate large buffer caches, customers hittingthis bug should either upgrade to 8.1.6 or higher, or request a backport to8.0.6. This algorithm does not apply to the other parameters defined insection 3.a which means setting them to large values may fail due to thevirtual address space fragmentation. Oracle7 has to be configured to avoid address space fragmentation by using theregistry value ORA_MAX_SGA_ALLOC, which defines the maximum allocation sizeand should be added to the registry under : HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE This parameter was renamed in Oracle8 to ORA_MAX_ALLOC and no longer affectsthe size of buffer cache sub area allocations. A number of the Oracle Database ports attempt to protect these global regions(particularly the log buffer) from erroronious access by stray pointers (e.g.pointers writing past the end of a valid region) using a guard page above andbelow the region. This could be implemented on Windows NT using a free page ora page marked with the PAGE_GUARD or PAGE_READONLY protection flag, but hasnot been implemented. d) Configuring the Oracle process to make allocations greater than 2GB---------------------------------------------------------------------- The Oracle database supports the 4GT tuning feature of Windows NT Server,Enterprise Edition from release 7.3 onwards, allowing it to access up to 3GBof virtual address space per instance. It may be the case that certainreleases / patch sets do not have the 4GT flag set even though the releasedoes support the feature. To check the executable has been correctly enabledrun : imagecfg oracle.exe oracle.exe contains the following configuration information: Subsystem Version of 4.0 Image can handle large (>2GB) addresses Stack Reserve Size: 0x100000 Stack Commit Size: 0x1000 For executables that do not have the flag set, run : imagecfg -l oracle.exe The above settings will only take affect if the boot.ini has been set up asdescribed in Note 46053.1. e) Configuring the Oracle process to make allocations greater than 3GB---------------------------------------------------------------------- Oracle 8.1.5 for Windows NT introduced support for the Intel ESMA (ExtendedServer Memory Architecture), which allows Oracle to access more than the 3GBof physical memory traditionally available to Windows NT applications. Access to this memory is limited to a single Oracle instance, but thisinstance can now allocate substantially more database buffers than previousreleases. Additional information is available in Note 46053.1 and on theIntel Web site. To take advantage of this support carry out the following steps : 1. More than 4GB of RAM must be present in the server on which Oracle will run. ESMA can be used with servers with less than 4GB of memory, but Oracle does not recommend customers use this configuration. 2. Windows NT 4.0 Enterprise Edition, Service Pack 3 or later must be installed on the server. 3. The Intel PSE36 driver must be installed and operational on the server. Customers should refer to their hardware vendor and the Intel Web site on how to set up the driver. 4. USE_INDIRECT_DATA_BUFFERS = TRUE must be set in the init.ora for the database instance that will use the PSE36 driver. If this parameter is not set, then Oracle behaves in exactly the same way as previous releases. 5. Set DB_BLOCK_BUFFERS and DB_BLOCK_SIZE as desired for the database. The total number of bytes of database buffers (that is, DB_BLOCK_BUFFERS multiplied by DB_BLOCK_SIZE) is no longer limited to the 3GB of address space as was the case in previous releases. 6. The VLM_BUFFER_MEMORY registry parameter must be created and set in the appropriate key for your Oracle home in the Windows NT Registry : HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE -> HOMEx This parameter is specified in bytes and has a default of 1GB. When set, this parameter tells Oracle how much non-PSE36 memory to use for database buffers. This memory comes from Oracle's virtual address space as was the case in previous releases. Setting this parameter to a large value has the effect of using more of Oracle's address space for buffers and using less PSE36 memory for buffers (assuming the DB_BLOCK_BUFFERS parameter remains the same). However, since accessing PSE36 buffers is somewhat slower than accessing virtual address space buffers, tune this parameter to be as large as possible without adversely limiting database operations (user session memory). For instance, assume that the Oracle database is running on a machine with 8GB of RAM, which means that the PSE36 driver has control of 4GB of RAM. If DB_BLOCK_BUFFERS = 2500000 and DB_BLOCK_SIZE = 2048, then a total of 5GB of database buffers needs to be allocated. If VLM_BUFFER_MEMORY is set to 1GB, then 1GB of buffers come from the Oracle virtual address space and 4GB come from the PSE36 driver. If you set VLM_BUFFER_MEMORY to 500MB, an error occurs at startup because there is not 4.5GB of memory available to the PSE36 driver for database buffers. Likewise, if VLM_BUFFER_MEMORY is set to 3GB, an error occurs because the Oracle8i address space is limited to 3GB on Windows NT, and this address space must also hold Oracle code, shared pool, PGA memory, and other structures. In general, the higher the VLM_BUFFER_MEMORY is set, the fewer connections and memory allocations will be possible for Oracle. The lower VLM_BUFFER_MEMORY is set, the slower the performance will be. The maximum size of the buffer cache is thus expressed as : = VLM_BUFFER_MEMORY + Physical Memory above 4GB 7. Once these parameters are set, the Oracle database can be started up and will function exactly the same as before except that more database buffers are available to the instance. In addition, disk I/O may be reduced since more Oracle data blocks can be cached in the SGA. If out of memory errors occur during the startup sequence, verify the following: a. PSE36 driver is installed and functional b. DB_BLOCK_BUFFERS is not set too high for the amount of memory in the machine. Note that more memory than just the database buffers themselves is required when starting up the database. For each database buffer, a database buffer header is also allocated in Oracle virtual address space. When allocating 2,000,000 database buffers, the memory for these buffer headers amounts to several hundred megabytes. This must be considered when setting DB_BLOCK_BUFFERS and VLM_BUFFER_MEMORY. c. VLM_BUFFER_MEMORY is not set too high for the amount of address space available to Oracle. In Windows NT's Performance Monitor, under the Process object, monitor the Virtual Bytes counter for the "ORACLE" process. If this counter approaches 3GB, then out of memory errors can occur. If this happens, reduce DB_BLOCK_BUFFERS and/or VLM_BUFFER_MEMORY until the database is able to start up. 8. Currently, there is a limitation in Server Manager for NT whereby the amount of database buffers displayed during database startup is incorrect if more than 4GB of buffers are in use. For instance, if 5GB of buffers are used, Server Manager will incorrectly report that 1GB are being used. This limitation will be fixed in a future release of Oracle. The support for ESMA can be used with the 4GT tuning feature of Windows NTServer, Enterprise Edition, as long as the appropriate advice in section 3.dabove is followed. 4. Database per session memory allocations========================================== a) Database session parameters------------------------------ All memory allocations made by an Oracle instance are limited by the processaddress space as described in section 2.a. This means users sessions haveaccess to the portion of the 2GB address space that is left after globalallocations are complete. For systems with large user populations a compromisemust be made between an appropriately sized SGA and the ability to fit all therequired users into the limited address space. The following list defines the main init.ora parameters that cause memoryto be allocated within the oracle process by each users session : - bitmap_merge_area_size - create_bitmap_area_size - hash_area_size - open_cursors - sort_area_size (sort_area_retained_size) Limiting the size of the above parameters will assist in achieving a balancebetween the size of the SGA and the size of users per session memoryallocations. Heavy use of PL/SQL constructs (such as PL/SQL tables) can alsosignificantly contribute to user session memory. b) Database sessions and Windows NT threads------------------------------------------- Whenever a thread is created in a process the system reserves a region of theaddress space for the thread's stack (each thread has it's own stack) and italso commits some physical storage to this reserved region. By default, thesystem reserves 1Mb of the address space and commits the top two pages of theregion. This can be changed by using the /STACK:reserve[.commit] linker flagor by techniques similar to those described in the following section, theOracle process has been linked in the default way. For more information onthe default behaviour refer to the "Threads and Memory allocations" sectionof Note 46053.1. When the Listener creates a users session on behalf of a connection it createsa thread in the Oracle process to service this connection, thus each usersconnection has its own thread in the Oracle process. In general, the Oracleprocess will commit around 300K of the 1Mb stack under normal operation, butbecause the remaining 700K is reserved no other session / thread can use thismemory. The main reason the Oracle process uses the default stack setting isbecause regression testing has shown that applications that perform highlyrecursive operations (such as nested triggers) can allocate a stack in excessof 650K. c) Altering the way Oracle creates per session memory structures---------------------------------------------------------------- The per session memory allocations listed in section 4.a do not come fromthe threads stack, section 4.d describes how they are separately allocatedfrom the address space. Keeping parameters such as SORT_AREA_SIZE to a minimumis the easiest way to minimize per session memory allocations, the only otheralternative is to alter the default stack size. Oracle supplies the ORASTACK utility to allow customers to modify the defaultstack size of a thread / session when created in the Oracle executable. WhenORASTACK is run against specific executables it alters the part of the binaryheader that defines the default stack size used by the create thread API. Itis not necessary to change the default number of pages committed by the threadbecause these will be allocated as required from the stack. By reducing thestack of every session created in the Oracle executable, it is possible toachieve a larger user population. In a system with a 1000 users reducing thestack from 1Mb to 500K would release 500Mb of the address space for otherallocations or more users. Customers should thoroughly test their applications against databases thathave the stack trimmed to less than 1Mb before using the new stack size intheir production systems. If the Oracle stack has been trimmed below the sizerequired by the Oracle server side code a stack overrun will occur and userssessions will fail (usually with an ORA-3113), there will be no trace files orentries in the CORE.LOG file. Oracle Support Services does not recommend that customers trim the stack below 500K, although a number of systems runwithout error on a 300K stack. ORASTACK must be run against all processes that can create a thread in theOracle executable, use the following syntax : orastack executable_name new_stack_size_in_bytes Below are examples of setting the stack to 500K for the main executables : orastack oracle.exe 500000 orastack tnslsnr.exe 500000 orastack svrmgrl.exe 500000 orastack sqlplus.exe 500000 Before running ORASTACK ensure no instances of the process are runningin the Windows task manager under the Processes tab. In addition, if there are programs on the server machine which connect to thedatabase locally [without SQL*NET], run orastack on those as well. d) How per session allocations are performed & address space fragmentation-------------------------------------------------------------------------- Once the listener has created a users session (thread and stack) the Oracleserver code takes over and starts to create the necessary memory structuresfor the users connection. These allocations and those required by parametersdescribed in section 4.a (which are created as and when the session requiresthem) are created using the Win32 API call "VirtualAlloc". Each session makescalls to "VirtualAlloc" with the MEM_RESERVE | MEM_COMMIT allocation flags,which both reserves and commits the region of the address space for itsprivate use. For information on how memory is released see section 4.e. When "VirtualAlloc" is called to reserve memory at a specific address itreturns an address that has been rounded down to the next 64K chunk in thevirtual address space. Oracle calls "VirtualAlloc" without defining a specificaddress, by passing in NULL, it is returned the address of the next available64K chunk. So when a users session makes a PGA, UGA or CGA allocation it isalso aligned along the 64K boundaries, committing the requested pages fromthis boundary up. Users sessions often make many small allocations which areless than 64K, this causes address space fragmentation because many 64Kregions exist with only a couple of pages committed. The following example shows what the address space would look like after theinitial allocations have been made by a users session : Address State Region Size (Bytes) ------- ------ ------------------- B290000 Stack 1,048,576 B390000 Commit 4096 B391000 Free 61440 B3A0000 Commit 4096 B3A1000 Free 61440 B3B0000 Commit 4096 B3B1000 Free 61440 B3C0000 Commit 65536 B3D0000 Commit 4096 B3D1000 Free 61440 B3E0000 Commit 4096 B3E1000 Free 61440 B3F0000 Commit 65536 B400000 Commit 65536 B410000 Commit 65536 The following table can be used as a guideline for calculating the minimum amount of the address space that will be used by a users session. It does nottake into account the memory that could be allocated by parameters describedin section 4.a as the session proceeds. The default 1Mb stack is also assumed. Version Minimum Memory ------- -------------- 7.3.4 1.38MB 8.0.6 1.56MB 8.1.7 1.56MB Once the address space starts to fill with users session allocations the willbe a danger that a new session can not be created due to the lack of availableaddress space. If this occurs the most likely error is : - ORA-12500 / TNS-12500 - TNS:listener failed to start a dedicated server process Other possible errors include : - ORA-12540 / TNS-12540 TNS:internal limit restriction exceeded - NT-8 Not enough storage is available to process this command - skgpspawn failed:category = .... - ORA-27142 could not create new process - ORA-27143 OS system call failure - ORA-4030 out of process memory when trying to allocate .... Due to address space fragmentation and dll's being loaded into the Oracleserver processes address space, these errors are likely to occur when theWindows NT performance monitor shows the Oracle process has allocated around1.6GB / 1.7GB of the 2GB address space. If the 4GT tuning feature is inoperation this will be around 2.5GB / 2.7GB. It is important to remember thatit is only the committed pages that are backed by physical memory or the pagefile. e) How session memory is released & thread termination consequences------------------------------------------------------------------- When a users session completes successfully it deallocates its memory usingthe Win32 API call "VirtualFree" with the MEM_DECOMMIT | MEM_RELEASEallocation flags. After all allocations have been freed the stack is alsoreleased, leaving the Oracle processes address space free of reference tothe completed session. If a users session terminates unexpectedly it will not release the memory ithas allocated, the allocated pages will remain in the Oracle processes addressspace until the process exits. Unexpected termination may occur if a userssession if forced to terminate for one of the following reasons : - Shutdown abort. - Alter session kill session. - Oracle command line utility orakill. - Oracle Administration assistant for Windows : kill session. - Other utilities that can kill threads in processes. Oracle Support Services recommends customers minimize the use of the abovecommands, in particular the shutdown abort command. When shutdown abort isrun its calls the Win32 API "TerminateThread" for each users session, whichkills the thread without releasing its memory. On systems with many users alarge percentage of the 2GB address space of the Oracle process will becomeinaccessible, ultimately causing allocation problems when Oracle is nextstarted. The only way to release this memory is to stop and start the OracleService (e.g. OracleServiceORCL). f) How to increase the number of sessions----------------------------------------- For customers who need to achieve large user populations on Windows NT, thefollowing can be used as a guide to optimising memory usage : - Reduce session parameters described in section 4.a to a minimum. - Reduce global database parameters described in section 3.a to a minimum. - Minimize the number of database job queues (job_queue_processes) and parallel query slaves (parallel_max_servers) as they also create threads in the Oracle executable. - Reduce the sessions / threads stack to 500K with ORASTACK. - Consider switching to the Oracle Multi Threaded Server (MTS). - Consider upgrading Windows NT to Windows NT Enterprise Edition. - Consider upgrading the hardware to support Intel ESMA.
If you are interested in generating cash from your websites via popunder ads, you should run with one of the highest paying networks - Propeller Ads.
ReplyDelete