Oracle LOB Fetch Size
Posted: Tue 06 Dec 2011 12:51
Hi Guys,
in a particular case of our infrastructure we need to manage a DB containing all our cached reports in order to quickly retrieve the information for our customers.
Our cache db is a very stupid single table DB, one table with one PK (Guid / raw(16)) and one BLOB column (min 5 KB, max 2 MB, avg 200 KB).
Our access strategy against this DB is:
- read (24/7)
- ins/upd (3 hours per day)
Taking apart all the pure DB performance considerations such as Partitioning, SECUREFILES vs BASIC BLOB, IOT, LOB Chuncking, Dedicated Tablespace Block Size and so on, we noticed that while we are inserting/updating very frequently, with an high degree of parallelism, the performances goes down and investigating the causes we found that the 92% of the time used by DB is related to this wait event: "SQL*Net more data from client".
This means that the DB has already received the update/insert command but it is waiting for receive the whole LOB (because the lobs are sent from client to server and viceversa chunked).
I suppose that this should happen also during read phase but the read phase is spreaded during all the 24 hours so it is less impacted by this wait event.
In our previous projects, we already addressed this problem using the Oracle ODP.NET and setting a command parameter (InitialLOBFetchSize), this parameter sets the amount of byte sent for each chunck (or something like that).
My question is: Exists something similar that we can use in devart dotConnect for Oracle that works using EntityFramework?
If you need we can provide a solution that reproduce this Oracle wait event.
Thanks in advance,
Monducci Marco
in a particular case of our infrastructure we need to manage a DB containing all our cached reports in order to quickly retrieve the information for our customers.
Our cache db is a very stupid single table DB, one table with one PK (Guid / raw(16)) and one BLOB column (min 5 KB, max 2 MB, avg 200 KB).
Our access strategy against this DB is:
- read (24/7)
- ins/upd (3 hours per day)
Taking apart all the pure DB performance considerations such as Partitioning, SECUREFILES vs BASIC BLOB, IOT, LOB Chuncking, Dedicated Tablespace Block Size and so on, we noticed that while we are inserting/updating very frequently, with an high degree of parallelism, the performances goes down and investigating the causes we found that the 92% of the time used by DB is related to this wait event: "SQL*Net more data from client".
This means that the DB has already received the update/insert command but it is waiting for receive the whole LOB (because the lobs are sent from client to server and viceversa chunked).
I suppose that this should happen also during read phase but the read phase is spreaded during all the 24 hours so it is less impacted by this wait event.
In our previous projects, we already addressed this problem using the Oracle ODP.NET and setting a command parameter (InitialLOBFetchSize), this parameter sets the amount of byte sent for each chunck (or something like that).
My question is: Exists something similar that we can use in devart dotConnect for Oracle that works using EntityFramework?
If you need we can provide a solution that reproduce this Oracle wait event.
Thanks in advance,
Monducci Marco