I’ve just stumbled over an issue with the new checksum algorithm introduced with Oracle 12c. It seams that in certain situation the new SHA-2 function cause a memory leak. A search on My Oracle Support revealed that there is a Bug on AIX. See Bug 19451972 MEMEORY LEAKS WITH SHA512, SHA384, SHA256 ENTRIES IN SQLNET.CRYPTO_CHECKSUM and the corresponding Note 1919000.1 SQLPlus 12c Memory usage Grows (Leaks) While Running Long Query.
Test Case
Nevertheless I have similar issues on a Exadata Machine and my Oracle VM. To verify my issue I’ve used a simple test case, where I start a SQL*Plus script which does:
- connect as SCOTT
- query some views eg. v$session_connect_info
- wait a few seconds
- query some views eg. v$session_connect_info
- start over with step 1
Since SQL*Plus does not support any loop I just use cat
to generate a script with a bunch of connect and SELECT
. For this I used the following Template (connect_scott_template.sql
):
connect scott/tiger@TDB12A alter session set nls_date_format='DD.MM.YYYY HH24:MI:SS'; select sysdate from dual; select sid, osuser, authentication_type, network_service_banner from v$session_connect_info where sid=(select sys_context('userenv','sid') from dual); exec DBMS_LOCK.SLEEP(10);
Based on this template I’ve created my SQL script with a for
loop.
for i in {1..720}; do cat connect_scott_template.sql >>connect_scott.sql ; done
If the script runs for a couple of minutes / hour you will see that RSS (real memory size / resident set size) does increase when network integrity check is enabled with SHA512. It remains on the same level for the same test without network integrity check. Below you see the output of my bash session history (with minor optimization for the web 😉 ):
cd /u00/app/oracle/admin/TDB12A/adhoc/nocksum export TNS_ADMIN=$PWD nohup sqlplus /nolog @connect_scott.sql & PID=17185 while [[ $(ps $PID|wc -l) > 1 ]] do echo $(date "+%Y.%m.%d %H:%M:%S $(ps u $PID|tail -1)") >>connect_scott_nocksum_<code>{{EJS10}}</code>.log sleep 30 done
I’ve started sqlplus and the script with nohup. To collect the rss information I’ve just created a while loop and pipe the output of ps
to a log file. For the test with checksum typ SHA512 used an alternative TNS_ADMIN directory with a different sqlnet.ora
. My Test did run for about two hours. I’ve but the collected data in an Excel sheet to create the following chart. You see, that both SQL*Plus process require more real memory over time. Nevertheless the required memory for SQL*Plus with SHA512 is definitely higher.
Files and References
Below you find the scripts mentioned above as well some MOS references:
- SQLPlus 12c Memory usage Grows (Leaks) While Running Long Query [1919000.1]
- MEMEORY LEAKS WITH SHA512, SHA384, SHA256 ENTRIES IN SQLNET.CRYPTO_CHECKSUM [19451972]
- MemoryLeak.xlsx
- connect_scott_template.sql
- connect_scott.sql
Conclusion
It seems that this Bug is a bit more generic than expected. Since the new SHA function would anyway just work for pure 12c environment, it is acceptable to use the old SHA1 Hash until this Bug is fixed.