SQL performance difference in application an in SQL Server
We are using Visual Studio 2010 and SQL Server 2012.
We insert into the database using the stored procedure InsertData.
When I timed in the program how long it takes to execute stored procedure InsertData, it takes more than 10 ms per insert. But, our SQL Admin told us that it took 0 ms to do the insert on SQL Server itself, and SQL Profiler also shows it took 0 ms to do that.
What can make the program shows that it took more than 10 ms per insert, but yet in SQL Server itself it takes 0 ms ? In the program below, t1 is before .executeNonquery and t2 is after .executeNonquery. If t2-t1 is more than 10 ms, I wrote it to a log
file, and I can see almost all records took longer than 10 ms. Thank you.
Private _command As SqlCommand
Private _connection As SqlConnection
_connection = New SqlConnection(_connectionString)
_connection.Open()
_command = New SqlCommand()
With _command
.Connection = _connection
.CommandType = CommandType.StoredProcedure
.CommandText = "InsertData"
.Parameters.Add("@sDateTime", SqlDbType.VarChar)
.Parameters.Add("@sContract", SqlDbType.VarChar)
.Parameters.Add("@sData", SqlDbType.VarChar)
.Parameters.Add("@iVol", SqlDbType.Int)
.Parameters.Add("@fTrade", SqlDbType.Float)
End With
With _command
.Parameters(0).Value = strongCastQuote.MessageDateTime
.Parameters(1).Value = sContract
.Parameters(2).Value = strongCastQuote.Data
.Parameters(3).Value = strongCastQuote.Volume.ToString()
.Parameters(4).Value = strongCastQuote.Price.ToString()
t1 = Date.Now.ToString("dd-MMM-yyyy HH:mm:ss") & "." & Date.Now.ToString("fffffff")
.ExecuteNonQuery()
t2 = Date.Now.ToString("dd-MMM-yyyy HH:mm:ss") & "." & Date.Now.ToString("fffffff")
If CDate(t2).Subtract(CDate(t1)).Milliseconds > 10 Then
LogExtra.SendToLog(sContract & " 1.strongCastQuote.MessageDateTime = " & strongCastQuote.MessageDateTime & " t1 = " & t1 & " t2 = " & t2)
End If
End With
Also please read this article
http://blogs.msdn.com/sqlserverstorageengine/archive/2008/03/23/minimal-logging-changes-in-sql-server-2008-part-2.aspx ---Minimal Logging changes in SQL Server 2008
Best Regards,Uri Dimant SQL Server MVP,
http://sqlblog.com/blogs/uri_dimant/
MS SQL optimization: MS SQL Development and Optimization
MS SQL Consulting:
Large scale of database and data cleansing
Remote DBA Services:
Improves MS SQL Database Performance
SQL Server Integration Services:
Business Intelligence
Similar Messages
-
Performance of J2ee Application running in Portal Server
Hi,
We have developed the J2ee Application using JSPDynPage and the performance of this Application is going down day by day.
It is taking arround 30 sec to load the page.Sometimes I am getting iView Timed out error if the Load is Very high.
This is all happening in Production server.Can any one please help me to increase the Performance of the Portal.
Thanks in Advance
Ajay> Thanks for the response.
>
> There is no problem in the application as i know the
> code in this application is perfectly fine.
>
> There will be huge load on monday that too between
> 9-11 AM as too many people will be doing the the
> Database transactions at that point of time (adding
> the data in to the DB extracting huge amount of data
> from DB) the CPU usage in the porduction server will
> reach 90 % to 99 % and it will never come down
> ...this will again come to the normal situation when
> we restart the portal database.
>
> But every monday i cannot restart the server as this
> is in production.
>
> Can anyone please give some tips to increase the
> performance of the portal.
Have you checked your Garbage Collector log file ?
I posted some hints about how to do that in the thread "Server Performance Issue" in this forum.
I could be that you are running out of memory after the heavy load and then everything will be slow afterwards, because full GC's might be triggered frequently.
Regards,
Markus
>
> Thanks
> Ajay -
Native SQL Performance Difference Between Hard-Coded Value and Parameter
Hi,
I have a native SQL (Oracle) query (fairly long & complex with a few sub-queries) that returns in under a second in both ODSI and using an external SQL tool. This query has a hard-coded value for a particular column, namely, a date column.
When I modify the ODSI function signature so that I pass in a parameter and then replace the hard-coded value in the native SQL with the appropriate parameter binding notation (i.e. '?'), the query takes much longer (2-30 seconds). The duration of the query depends on how many records are actually returned, so it must be running a separate query for each of the results (i.e. the more results returned, the longer the query takes to return).
What can I do to keep the duration of my ODSI query low while allowing for the parameter?OSDI plan with date parameter:
<?xml version="1.0"?>
<source ns="fn-bea" name="jdbc.wcb.fineos" kind="relational" tip="jdbc.wcb.fineos">
<![CDATA[select codeid, description, FEE_CODE_DOC_TYPE, ismax, isovr
from
select distinct
sd.codeid, sd.description,
select count(*) from wcbapp.tolserviceset ss, wcbapp.RSERVICESRVCSETSERVICESETS sss, wcbapp.tolservicedefinition sd1 where
sss.i_from = sd.i and
sss.c_from = sd.c and
sss.i_to = ss.i and
sss.c_to = ss.c and
sd1.codeid = sd.codeid and
ss.name = 'FEEGROUP-MAX (MAXIMUM AMOUNT)'
) ISMAX,
select count(*) from wcbapp.tolserviceset ss, wcbapp.RSERVICESRVCSETSERVICESETS sss, wcbapp.tolservicedefinition sd1 where
sss.i_from = sd.i and
sss.c_from = sd.c and
sss.i_to = ss.i and
sss.c_to = ss.c and
sd1.codeid = sd.codeid and
ss.name = 'FEEGROUP-OVR (Overrideable)'
ISOVR,
select count(*) from wcbapp.tolserviceset ss, wcbapp.RSERVICESRVCSETSERVICESETS sss, wcbapp.tolservicedefinition sd1 where
sss.i_from = sd.i and
sss.c_from = sd.c and
sss.i_to = ss.i and
sss.c_to = ss.c and
sd1.codeid = sd.codeid and
ss.name = 'FEEGROUP-INT (Internet Enterable)'
ISINT
,trow.answerstr FEE_CODE_DOC_TYPE
from wcbapp.tocorganisation o, wcbapp.tolpartydetails pd, wcbapp.tolserviceagrmtforprovider safp,
wcbapp.tolserviceagreement sa, wcbapp.tolserviceagreementversion sav, wcbapp.rsrvchrgrsrvagrvrserviceagreem scg_sav,
wcbapp.tolservicechargegroup scg, wcbapp.tolservicechargegroupversion scgv, wcbapp.tolserviceprovisionagreement spa,
wcbapp.tolservicedefinition sd
,wcbapp.trow trow, wcbapp.tlookupversion tlookupversion, wcbapp.tlookup tlookup
where
trow.i_lkpver_rows = tlookupversion.i
and trow.c_lkpver_rows = tlookupversion.c
and tlookupversion.i_lookup_versions = tlookup.i
and tlookupversion.c_lookup_versions = tlookup.c
and sd.codeid = trow.minstr_1
and sd.codeid = trow.maxstr_1
and tlookup.name = 'FeeCodeToDocumentLookup' and
spa.i_service_serviceratede = sd.i and
spa.c_service_serviceratede = sd.c and
spa.i_srchrgrv_serviceratede = scgv.i and
spa.c_srchrgrv_serviceratede = scgv.c and
scgv.i_srvchrgr_servicecharge = scg.i and
scgv.c_srvchrgr_servicecharge = scg.c and
scg.i = scg_sav.i_from and
scg.c = scg_sav.c_from and
scg_sav.i_to = sav.i and
scg_sav.c_to = sav.c and
sav.i_srvcagrm_serviceagreem = sa.i and
sav.c_srvcagrm_serviceagreem = sa.c and
sa.i = safp.i_srvcagrm_provider and
sa.c = safp.c_srvcagrm_provider and
safp.i_prtdtls_serviceagreem = pd.i and
safp.c_prtdtls_serviceagreem = pd.c and
pd.i_ocprty_party = o.i and
pd.c_ocprty_party = o.c and
? between safp.effectivedate and safp.enddate and
o.customerno = ? || ?
order by sd.codeid
where ISINT = 1]]>
<variable name="__fparam0" kind="EXTERNAL">
</variable>
<variable name="__fparam1" kind="EXTERNAL">
</variable>
<variable name="__fparam2" kind="EXTERNAL">
</variable>
</source>
OSDI plan with date constant:
<?xml version="1.0"?>
<source ns="fn-bea" name="jdbc.wcb.fineos" kind="relational" tip="jdbc.wcb.fineos">
<![CDATA[select codeid, description, FEE_CODE_DOC_TYPE, ismax, isovr
from
select distinct
sd.codeid, sd.description,
select count(*) from wcbapp.tolserviceset ss, wcbapp.RSERVICESRVCSETSERVICESETS sss, wcbapp.tolservicedefinition sd1 where
sss.i_from = sd.i and
sss.c_from = sd.c and
sss.i_to = ss.i and
sss.c_to = ss.c and
sd1.codeid = sd.codeid and
ss.name = 'FEEGROUP-MAX (MAXIMUM AMOUNT)'
) ISMAX,
select count(*) from wcbapp.tolserviceset ss, wcbapp.RSERVICESRVCSETSERVICESETS sss, wcbapp.tolservicedefinition sd1 where
sss.i_from = sd.i and
sss.c_from = sd.c and
sss.i_to = ss.i and
sss.c_to = ss.c and
sd1.codeid = sd.codeid and
ss.name = 'FEEGROUP-OVR (Overrideable)'
ISOVR,
select count(*) from wcbapp.tolserviceset ss, wcbapp.RSERVICESRVCSETSERVICESETS sss, wcbapp.tolservicedefinition sd1 where
sss.i_from = sd.i and
sss.c_from = sd.c and
sss.i_to = ss.i and
sss.c_to = ss.c and
sd1.codeid = sd.codeid and
ss.name = 'FEEGROUP-INT (Internet Enterable)'
ISINT
,trow.answerstr FEE_CODE_DOC_TYPE
from wcbapp.tocorganisation o, wcbapp.tolpartydetails pd, wcbapp.tolserviceagrmtforprovider safp,
wcbapp.tolserviceagreement sa, wcbapp.tolserviceagreementversion sav, wcbapp.rsrvchrgrsrvagrvrserviceagreem scg_sav,
wcbapp.tolservicechargegroup scg, wcbapp.tolservicechargegroupversion scgv, wcbapp.tolserviceprovisionagreement spa,
wcbapp.tolservicedefinition sd
,wcbapp.trow trow, wcbapp.tlookupversion tlookupversion, wcbapp.tlookup tlookup
where
trow.i_lkpver_rows = tlookupversion.i
and trow.c_lkpver_rows = tlookupversion.c
and tlookupversion.i_lookup_versions = tlookup.i
and tlookupversion.c_lookup_versions = tlookup.c
and sd.codeid = trow.minstr_1
and sd.codeid = trow.maxstr_1
and tlookup.name = 'FeeCodeToDocumentLookup' and
spa.i_service_serviceratede = sd.i and
spa.c_service_serviceratede = sd.c and
spa.i_srchrgrv_serviceratede = scgv.i and
spa.c_srchrgrv_serviceratede = scgv.c and
scgv.i_srvchrgr_servicecharge = scg.i and
scgv.c_srvchrgr_servicecharge = scg.c and
scg.i = scg_sav.i_from and
scg.c = scg_sav.c_from and
scg_sav.i_to = sav.i and
scg_sav.c_to = sav.c and
sav.i_srvcagrm_serviceagreem = sa.i and
sav.c_srvcagrm_serviceagreem = sa.c and
sa.i = safp.i_srvcagrm_provider and
sa.c = safp.c_srvcagrm_provider and
safp.i_prtdtls_serviceagreem = pd.i and
safp.c_prtdtls_serviceagreem = pd.c and
pd.i_ocprty_party = o.i and
pd.c_ocprty_party = o.c and
'01-MAY-11' between safp.effectivedate and safp.enddate and
o.customerno = ? || ?
order by sd.codeid
where ISINT = 1]]>
<variable name="__fparam0" kind="EXTERNAL">
</variable>
<variable name="__fparam1" kind="EXTERNAL">
</variable>
</source>
ODSI Audit with date parameter:
[Thu May 12 13:02:23 GMT-06:00 2011] Starting...
Query compilation time: 0 ms
Query evaluation time: 16142 ms
Operation duration: 16189 ms
Audit Event:
common/application
user: weblogic
name: ClaimsDataspace
server: AdminServer
eventkind: evaluation
query/cache/queryplan
found: false
type: XQUERY_PLAN_CACHE
query/cache/queryplan
type: XQUERY_PLAN_CACHE
inserted: true
query/performance
compiletime: 0
common/session/query/invocation
time: Thu May 12 13:02:07 GMT-06:00 2011
blocksize: 65536
duration: 16001
common/session/query/invocation
time: Thu May 12 13:02:23 GMT-06:00 2011
blocksize: 65536
duration: 47
common/session/query/invocation
time: Thu May 12 13:02:23 GMT-06:00 2011
blocksize: 65536
duration: 46
common/session/query/invocation
time: Thu May 12 13:02:23 GMT-06:00 2011
blocksize: 35779
duration: 16
query/wrappers/relational
source: jdbc.wcb.fineos
sql:
select codeid, description, FEE_CODE_DOC_TYPE, ismax, isovr
from
select distinct
sd.codeid, sd.description,
select count(*) from wcbapp.tolserviceset ss, wcbapp.RSERVICESRVCSETSERVICESETS sss, wcbapp.tolservicedefinition sd1 where
sss.i_from = sd.i and
sss.c_from = sd.c and
sss.i_to = ss.i and
sss.c_to = ss.c and
sd1.codeid = sd.codeid and
ss.name = 'FEEGROUP-MAX (MAXIMUM AMOUNT)'
) ISMAX,
select count(*) from wcbapp.tolserviceset ss, wcbapp.RSERVICESRVCSETSERVICESETS sss, wcbapp.tolservicedefinition sd1 where
sss.i_from = sd.i and
sss.c_from = sd.c and
sss.i_to = ss.i and
sss.c_to = ss.c and
sd1.codeid = sd.codeid and
ss.name = 'FEEGROUP-OVR (Overrideable)'
ISOVR,
select count(*) from wcbapp.tolserviceset ss, wcbapp.RSERVICESRVCSETSERVICESETS sss, wcbapp.tolservicedefinition sd1 where
sss.i_from = sd.i and
sss.c_from = sd.c and
sss.i_to = ss.i and
sss.c_to = ss.c and
sd1.codeid = sd.codeid and
ss.name = 'FEEGROUP-INT (Internet Enterable)'
ISINT
,trow.answerstr FEE_CODE_DOC_TYPE
from wcbapp.tocorganisation o, wcbapp.tolpartydetails pd, wcbapp.tolserviceagrmtforprovider safp,
wcbapp.tolserviceagreement sa, wcbapp.tolserviceagreementversion sav, wcbapp.rsrvchrgrsrvagrvrserviceagreem scg_sav,
wcbapp.tolservicechargegroup scg, wcbapp.tolservicechargegroupversion scgv, wcbapp.tolserviceprovisionagreement spa,
wcbapp.tolservicedefinition sd
,wcbapp.trow trow, wcbapp.tlookupversion tlookupversion, wcbapp.tlookup tlookup
where
trow.i_lkpver_rows = tlookupversion.i
and trow.c_lkpver_rows = tlookupversion.c
and tlookupversion.i_lookup_versions = tlookup.i
and tlookupversion.c_lookup_versions = tlookup.c
and sd.codeid = trow.minstr_1
and sd.codeid = trow.maxstr_1
and tlookup.name = 'FeeCodeToDocumentLookup' and
spa.i_service_serviceratede = sd.i and
spa.c_service_serviceratede = sd.c and
spa.i_srchrgrv_serviceratede = scgv.i and
spa.c_srchrgrv_serviceratede = scgv.c and
scgv.i_srvchrgr_servicecharge = scg.i and
scgv.c_srvchrgr_servicecharge = scg.c and
scg.i = scg_sav.i_from and
scg.c = scg_sav.c_from and
scg_sav.i_to = sav.i and
scg_sav.c_to = sav.c and
sav.i_srvcagrm_serviceagreem = sa.i and
sav.c_srvcagrm_serviceagreem = sa.c and
sa.i = safp.i_srvcagrm_provider and
sa.c = safp.c_srvcagrm_provider and
safp.i_prtdtls_serviceagreem = pd.i and
safp.c_prtdtls_serviceagreem = pd.c and
pd.i_ocprty_party = o.i and
pd.c_ocprty_party = o.c and
? between safp.effectivedate and safp.enddate and
o.customerno = ? || ?
order by sd.codeid
where ISINT = 1
parameters:
2011-05-01T00:00:00
DOC
007492
time: 16048
rows: 1967
query/performance
evaltime: 16142
query/service
result:
*** removed due to length ***
query/service
function: getFeeCodeByCaregiverEffectiveDate1
arity: 3
dataservice: ld:org/wcb/claims/payment/FINEOS/physical/SQL.ds
query:
import schema namespace t1 = "http://www.test.com/claims/payment" at "ld:org/wcb/claims/payment/FINEOS/physical/schemas/SQL.xsd";
declare namespace ns0="ld:org/wcb/claims/payment/FINEOS/physical/SQL";
declare namespace ns1="http://www.w3.org/2001/XMLSchema";
declare variable $__fparam0 as ns1:dateTime external;
declare variable $__fparam1 as ns1:string external;
declare variable $__fparam2 as ns1:string external;
fn:subsequence(
for $FeeCode3 in ns0:getFeeCodeByCaregiverEffectiveDate1($__fparam0,$__fparam1,$__fparam2)
return
$FeeCode3
,1,5000)
parameters:
2011-05-01T00:00:00
DOC
007492
common/time
duration: 16189
timestamp: Thu May 12 13:02:07 GMT-06:00 2011
[Thu May 12 13:02:23 GMT-06:00 2011] End
ODSI Audit with date constant:
[Thu May 12 13:10:00 GMT-06:00 2011] Starting...
Query compilation time: 0 ms
Query evaluation time: 359 ms
Operation duration: 375 ms
Audit Event:
common/application
user: weblogic
name: ClaimsDataspace
server: AdminServer
eventkind: evaluation
query/cache/queryplan
found: true
type: XQUERY_PLAN_CACHE
query/performance
compiletime: 0
common/session/query/invocation
time: Thu May 12 13:10:00 GMT-06:00 2011
blocksize: 59256
duration: 359
query/wrappers/relational
source: jdbc.wcb.fineos
sql:
select codeid, description, FEE_CODE_DOC_TYPE, ismax, isovr
from
select distinct
sd.codeid, sd.description,
select count(*) from wcbapp.tolserviceset ss, wcbapp.RSERVICESRVCSETSERVICESETS sss, wcbapp.tolservicedefinition sd1 where
sss.i_from = sd.i and
sss.c_from = sd.c and
sss.i_to = ss.i and
sss.c_to = ss.c and
sd1.codeid = sd.codeid and
ss.name = 'FEEGROUP-MAX (MAXIMUM AMOUNT)'
) ISMAX,
select count(*) from wcbapp.tolserviceset ss, wcbapp.RSERVICESRVCSETSERVICESETS sss, wcbapp.tolservicedefinition sd1 where
sss.i_from = sd.i and
sss.c_from = sd.c and
sss.i_to = ss.i and
sss.c_to = ss.c and
sd1.codeid = sd.codeid and
ss.name = 'FEEGROUP-OVR (Overrideable)'
ISOVR,
select count(*) from wcbapp.tolserviceset ss, wcbapp.RSERVICESRVCSETSERVICESETS sss, wcbapp.tolservicedefinition sd1 where
sss.i_from = sd.i and
sss.c_from = sd.c and
sss.i_to = ss.i and
sss.c_to = ss.c and
sd1.codeid = sd.codeid and
ss.name = 'FEEGROUP-INT (Internet Enterable)'
ISINT
,trow.answerstr FEE_CODE_DOC_TYPE
from wcbapp.tocorganisation o, wcbapp.tolpartydetails pd, wcbapp.tolserviceagrmtforprovider safp,
wcbapp.tolserviceagreement sa, wcbapp.tolserviceagreementversion sav, wcbapp.rsrvchrgrsrvagrvrserviceagreem scg_sav,
wcbapp.tolservicechargegroup scg, wcbapp.tolservicechargegroupversion scgv, wcbapp.tolserviceprovisionagreement spa,
wcbapp.tolservicedefinition sd
,wcbapp.trow trow, wcbapp.tlookupversion tlookupversion, wcbapp.tlookup tlookup
where
trow.i_lkpver_rows = tlookupversion.i
and trow.c_lkpver_rows = tlookupversion.c
and tlookupversion.i_lookup_versions = tlookup.i
and tlookupversion.c_lookup_versions = tlookup.c
and sd.codeid = trow.minstr_1
and sd.codeid = trow.maxstr_1
and tlookup.name = 'FeeCodeToDocumentLookup' and
spa.i_service_serviceratede = sd.i and
spa.c_service_serviceratede = sd.c and
spa.i_srchrgrv_serviceratede = scgv.i and
spa.c_srchrgrv_serviceratede = scgv.c and
scgv.i_srvchrgr_servicecharge = scg.i and
scgv.c_srvchrgr_servicecharge = scg.c and
scg.i = scg_sav.i_from and
scg.c = scg_sav.c_from and
scg_sav.i_to = sav.i and
scg_sav.c_to = sav.c and
sav.i_srvcagrm_serviceagreem = sa.i and
sav.c_srvcagrm_serviceagreem = sa.c and
sa.i = safp.i_srvcagrm_provider and
sa.c = safp.c_srvcagrm_provider and
safp.i_prtdtls_serviceagreem = pd.i and
safp.c_prtdtls_serviceagreem = pd.c and
pd.i_ocprty_party = o.i and
pd.c_ocprty_party = o.c and
'01-MAY-11' between safp.effectivedate and safp.enddate and
o.customerno = ? || ?
order by sd.codeid
where ISINT = 1
parameters:
DOC
007492
time: 344
rows: 500
query/performance
evaltime: 359
query/service
result:
*** removed due to length ***
query/service
function: getFeeCodeByCaregiverEffectiveDate1
arity: 2
dataservice: ld:org/wcb/claims/payment/FINEOS/physical/SQL.ds
query:
import schema namespace t1 = "http://www.test.com/claims/payment" at "ld:org/wcb/claims/payment/FINEOS/physical/schemas/SQL.xsd";
declare namespace ns0="ld:org/wcb/claims/payment/FINEOS/physical/SQL";
declare namespace ns1="http://www.w3.org/2001/XMLSchema";
declare variable $__fparam0 as ns1:string external;
declare variable $__fparam1 as ns1:string external;
fn:subsequence(
for $FeeCode3 in ns0:getFeeCodeByCaregiverEffectiveDate1($__fparam0,$__fparam1)
return
$FeeCode3
,1,500)
parameters:
DOC
007492
common/time
duration: 375
timestamp: Thu May 12 13:10:00 GMT-06:00 2011
[Thu May 12 13:10:00 GMT-06:00 2011] End
------------------------------------------------------------------------ -
Differences between application for App. Server and stand alone application
What are main differences?
Why to use App. Server. if it is possible easily make Server application that listens port using socket classes?Can u please give a short example for 1, 3 and 4?The container will pool instances of your bean which aids in perfromance gain.
You can handle security issues declaratively.
The container manages the life cycle of your beans so that you can handle actions at bean's activation, passivation, initialization, destruction etc. -
SQL Loader and Insert Into Performance Difference
Hello All,
Im in a situation to measure performance difference between SQL Loader and Insert into. Say there 10000 records in a flat file and I want to load it into a staging table.
I know that if I use PL/SQL UTL_FILE to do this job performance will degrade(dont ask me why im going for UTL_FILE instead of SQL Loader). But I dont know how much. Can anybody tell me the performance difference in % (like 20% will decrease) in case of 10000 records.
Thanks,
Kannan.Kannan B wrote:
Do not confuse the topic, as I told im not going to use External tables. This post is to speak the performance difference between SQL Loader and Simple Insert Statement.I don't think people are confusing the topic.
External tables are a superior means of reading a file as it doesn't require any command line calls or external control files to be set up. All that is needed is a single external table definition created in a similar way to creating any other table (just with the additional external table information obviously). It also eliminates the need to have a 'staging' table on the database to load the data into as the data can just be queried as needed directly from the file, and if the file changes, so does the data seen through the external table automatically without the need to re-run any SQL*Loader process again.
Who told you not to use External Tables? Do they know what they are talking about? Can they give a valid reason why external tables are not to be used?
IMO, if you're considering SQL*Loader, you should be considering External tables as a better alternative. -
SQL Server 2008R2 vs 2012 OLTP performance difference - log flushes size different
Hi all,
I'm doing some performance test against 2 identical virtual machine (each VM has the same virtual resources and use the same physical hardware).
The 1° VM has Windows Server 2008R2 and SQL Server 2008R2 Standard Edition
the 2° VM has Windows Server 2012R2 and SQL Server 2012 SP2 + CU1 Standard Edition
I'm using hammerDB (http://hammerora.sourceforge.net/) has benchmark tool to simulate TPC-C test.
I've noticed a significative performance difference between SQL2008R2 and SQL2012, 2008R2 does perform better. Let's explain what I've found:
I use a third VM as client where HammerDB software is installed, I run the test against the two SQL Servers (one server at a time), in SQL2008R2 I reach an higher number of transaction per minutes.
HammerDB creates a database on each database server (so the database are identical except for the compatibility level), and then HammerDB execute a sequence of query (insert-update) simulating the TPC-C standard, the sequence is identical on both servers.
Using perfmon on the two servers I've found a very interesting thing:
In the disk used by the hammerDB database's log (I use separate disk for data and log) I've monitored the Avg. Disk Bytes/Write and I've noticed tha the SQL2012 writes to the log with smaller packet (let's say an average of 3k against an average of 5k written
by the SQL 2008R2).
I've also checked the value of Log flushes / sec on both servers and noticed that SQL2012 do, on average, more log flushes per second, so more log flushes of less bytes...
I've searched for any documented difference in the way log buffers are flushed to disk between 2008r2 and 2012 but found no difference.
Anyone can piont me in the correct direction?Andrea,
1) first of all fn_db_log exposes a lot of fields that do not exist in SQL2008R2
This is correct, though I can't elaborate as I do not know how/why the changes were made.
2) for the same DML or DDL the number of log record generated are different
I thought as much (but didn't know the workload).
I would like to read and to study what this changes are! Have you some usefu link to interals docs?
Unfortunately I cannot offer anything as the function used is currently undocumented and there are no published papers or documentation by MS on reading log records/why/how. I would assume this to all be NDA information by Microsoft.
Sorry I can't be of more help, but you at least know that the different versions do have behavior changes.
Sean Gallardy | Blog | Microsoft Certified Master -
Real Application Testing/Sql Performance Analyzer Docs in 10g....
I believed that both the tools mentioned in the subject are a part of 11g and so are in the 11g docs.
http://download.oracle.com/docs/cd/B28359_01/server.111/e12253/toc.htm
But I was just looking at 10g book listing and I saw the same book in 10g documentation as well.
http://download.oracle.com/docs/cd/B19306_01/server.102/e12024/toc.htm
Now my best guess is that this is due to the backporting of 11g tools for the previous releases. Means that we can do RAT or use SPA in pre 11g databases as well so this doc book is added. Is it correct or there is some other reason?
Cheers
Aman....Real Application Testing was introduced as a new feature in Oracle Database 11g. The documentation for Real Application Testing was released in 4 phases.
In the initial phase, the usage of Real Application Testing was documented in the Performance Tuning Guide for release 11.1.
In the second phase, the Real Application Testing User's Guide was released for release 10.2 to document certain backported functionalities. For Database Replay, the capability to capture a database workload was backported. For SQL Performance Analyzer, the capability to capture a SQL workload into a SQL tuning set was backported. These functionalities were backported to Oracle Database 10g Release 2 (version 10.2.0.4 or higher) to support customers who want to use Real Application Testing to test database upgrades from a previous version of Oracle Database to Oracle Database 11g.
In the third phase, the Real Application Testing Addendum was released for release 11.1 to document the added functionality to read SQL trace files from Oracle Database 9i to construct a SQL tuning set that can be used as an input source for SQL Performance Analyzer in release 11.1.0.7.
In the final phase, all available documentation for Real Application Testing contained in the above documents were consolidated into the Real Application Testing User's Guide for release 11.1. Going forward, this guide will contain all documentation of Real Application Testing and be updated for each release.
Regards,
Immanuel -
PL/SQL Performance problem
I am facing a performance problem with my current application (PL/SQL packaged procedure)
My application takes data from 4 temporary tables, does a lot of validation and
puts them into permanent tables.(updates if present else inserts)
One of the temporary tables is parent table and can have 0 or more rows in
the other tables.
I have analyzed all my tables and indexes and checked all my SQLs
They all seem to be using the indexes correctly.
There are 1.6 million records combined in all 4 tables.
I am using Oracle 8i.
How do I determine what is causing the problem and which part is taking time.
Please help.
The skeleton of the code which we have written looks like this
MAIN LOOP ( 255308 records)-- Parent temporary table
-----lots of validation-----
update permanent_table1
if sql%rowcount = 0 then
insert into permanent_table1
Loop2 (0-5 records)-- child temporary table1
-----lots of validation-----
update permanent_table2
if sql%rowcount = 0 then
insert into permanent_table2
end loop2
Loop3 (0-5 records)-- child temporary table2
-----lots of validation-----
update permanent_table3
if sql%rowcount = 0 then
insert into permanent_table3
end loop3
Loop4 (0-5 records)-- child temporary table3
-----lots of validation-----
update permanent_table4
if sql%rowcount = 0 then
insert into permanent_table4
end loop4
-- COMMIT after every 3000 records
END MAIN LOOP
Thanks
Ashwin N.Do this intead of ditching the PL/SQL.
DECLARE
TYPE NumTab IS TABLE OF NUMBER(4) INDEX BY BINARY_INTEGER;
TYPE NameTab IS TABLE OF CHAR(15) INDEX BY BINARY_INTEGER;
pnums NumTab;
pnames NameTab;
t1 NUMBER(5);
t2 NUMBER(5);
t3 NUMBER(5);
BEGIN
FOR j IN 1..5000 LOOP -- load index-by tables
pnums(j) := j;
pnames(j) := 'Part No. ' || TO_CHAR(j);
END LOOP;
t1 := dbms_utility.get_time;
FOR i IN 1..5000 LOOP -- use FOR loop
INSERT INTO parts VALUES (pnums(i), pnames(i));
END LOOP;
t2 := dbms_utility.get_time;
FORALL i IN 1..5000 -- use FORALL statement
INSERT INTO parts VALUES (pnums(i), pnames(i));
get_time(t3);
dbms_output.put_line('Execution Time (secs)');
dbms_output.put_line('---------------------');
dbms_output.put_line('FOR loop: ' || TO_CHAR(t2 - t1));
dbms_output.put_line('FORALL: ' || TO_CHAR(t3 - t2));
END;
Try this link, http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96624/05_colls.htm#23723 -
Help needed in SQL performance - Using CASE in SQL statement versus 2 query
Hi,
I have a requirement to find count from a bunch of tables.
The SQL I have gives the count of all members.
I have created 2 queries to find count of active and inactive members.
The key difference is only the active dates.
Each query takes 20 seconds to execute.
I modified the SQL to use CASE statement in the SELECT.
So after the data is fetched the CASE statement will evaluate the active date and gives 2 counts (active and inactive)
Is it advisable to use this approach. Will CASE improve SQL performance ? I have to justify this.
Please let me know your thoughts.
Thanks,
JHi,
If it can be done in single SQL do it in single SQL.
You said:
Will CASE improve SQL performance There can be both cases to prove if the performance is better or worse.
In your case you should tell us how it is.
Regards,
Bhushan -
No of columns in a table and SQL performance
How does the table size effects sql performance?
I am comparing 2 tables , with same number of rows(54 million rows) ,
table1(columns a,b,c,d,e,f..) has 40 columns
table2 (columns (a,b,c,d)
SQL uses columns a,b.
SQL using table2 runs in 1 sec.
SQL using table1 runs in 30 min.
Can any one please let me know how the table size , number of columns in table efects the performance of SQL's?
Thanks
jeevan.user600431 wrote:
This is a general question. I just want to compare table with more columns and table with less columns with same number of rows .
I am finding that table with less columns is good in performance , than the table with more columns.
Assuming there are no row chains , will there be any difference in performance with the number of columns in a table.Jeevan,
the question is not how many columns your table has, but how large your table segment is. If your query runs a full table scan it has to read through the whole table segment, so in that case the size of the table matters.
A table having more columns potentially has a larger row size than a table with less columns but this is not a general rule. Think of large columns, e.g. varchar2 columns, think of blank (NULL) columns and you can easily end up with a table consisting of a single column taking up more space per row than a table with 200 columns consisting only of varchar2(1) columns.
Check the DBA/ALL/USER_SEGMENTS view to determine the size of your two table segments. If you gather statistics on the tables then the dictionary will contain information about the average row size.
If your query is using indexes then the size of the table won't affect the query performance significantly in many cases.
Regards,
Randolf
Oracle related stuff blog:
http://oracle-randolf.blogspot.com/
SQLTools++ for Oracle (Open source Oracle GUI for Windows):
http://www.sqltools-plusplus.org:7676/
http://sourceforge.net/projects/sqlt-pp/ -
What are the Basic Differences between Oracle and MS-SQL server Database?
Hello,
anybody pls Guide me about the Differences between Oracle and MS-SQL server Database.and also IBM Databases also
Regards,
BalaramSQL Server only works on Windows-based platforms, including Windows 9x, Windows NT, Windows 2000 and Windows CE.
In comparison with SQL Server , OracleDatabase supports all known platforms, including Windows-based platforms, AIX-Based Systems, Compaq Tru64 UNIX, HP 9000 Series HP-UX, Linux Intel, Sun Solaris and so on.
The SQL Server advantages:
SQL Server holds the top TPC-C performance and price/performance results.
SQL Server is generally accepted as easier to install, use and manage.
The Oracle Database advantages:
Oracle Database supports all known platforms, not only the Windows-based platforms.
PL/SQL is more powerful language than T-SQL.
More fine-tuning to the configuration can be done via start-up parameters.
Samrat -
How can I improve below SQL performance.
Hi,
How can I improve below SQL performance. This SQL consumes CPU and occures wait events. It is running every 10 seconds. When I look at the session information from Enterprise Manager I can see that "Histogram for Wait Event: PX Deq Credit: send blkd"
I created some indexes. I heard that the indexes are not used when there is a NULL but when I checked the xecution plan It uses index.
SELECT i.ID
FROM EXPRESS.invoices i
WHERE i.nbr IS NOT NULL
AND i.EXTRACT_BATCH IS NULL
AND i.SUB_TYPE='COD'
Explain Plan from Toad
SELECT STATEMENT CHOOSECost: 77 Bytes: 6,98 Cardinality: 349
4 PX COORDINATOR
3 PX SEND QC (RANDOM) SYS.:TQ10000 Cost: 77 Bytes: 6,98 Cardinality: 349
2 PX BLOCK ITERATOR Cost: 77 Bytes: 6,98 Cardinality: 349
1 INDEX FAST FULL SCAN INDEX EXPRESS.INVC_TRANS_INDX Cost: 77 Bytes: 6,98 Cardinality: 349
Execution Plan from Sqlplus
| Id | Operation | Name | Rows | Bytes | Cost | TQ |IN-OUT| PQ Distrib |
| 0 | SELECT STATEMENT | | 349 | 6980 | 77 | | | |
| 1 | PX COORDINATOR | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 349 | 6980 | 77 | Q1,00 | P->S | QC (RAND) |
| 3 | PX BLOCK ITERATOR | | 349 | 6980 | 77 | Q1,00 | PCWC | |
|* 4 | INDEX FAST FULL SCAN| INVC_TRANS_INDX | 349 | 6980 | 77 | Q1,00 | PCWP | |
Predicate Information (identified by operation id):
4 - filter("I"."NBR" IS NOT NULL AND "I"."EXTRACT_BATCH" IS NULL AND "I"."SUB_TYPE"='COD')
Note
- 'PLAN_TABLE' is old version
- cpu costing is off (consider enabling it)
Statistics
141 recursive calls
0 db block gets
5568 consistent gets
0 physical reads
0 redo size
319 bytes sent via SQL*Net to client
458 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
0 rows processed
Instance Efficiency Percentages (Target 100%)
Buffer Nowait %: 100.00
Redo NoWait %: 100.00
Buffer Hit %: 99.70
In-memory Sort %: 100.00
Library Hit %: 99.81
Soft Parse %: 99.77
Execute to Parse %: 63.56
Latch Hit %: 90.07
Parse CPU to Parse Elapsd %: 0.81
% Non-Parse CPU: 98.88
Top 5 Timed Events
Event Waits Time(s) Avg Wait(ms) % Total Call Time Wait Class
latch: library cache 12,626 16,757 1,327 62.6 Concurrency
CPU time 5,712 21.Mar
latch: session allocation 1,848,987 1,99 1 07.Nis Other
PX Deq Credit: send blkd 1,242,265 981 1 03.Tem Other
PX qref latch 1,405,819 726 1 02.Tem Other
The database version is 10.2.0.1 but we haven't installed the patch 10.2.0.5. yet.
I am waiting your comments.
Thanks in advanceWelcome to the forum.
I created some indexes. I heard that the indexes are not used when there is a NULL but when I checked the xecution plan It uses index. What columns are indexed?
And what do:
select i.sub_type
, count(*)
from express.invoices i
where i.nbr is not null
and i.extract_batch is null
group by i.sub_type; and
select i.sub_type
, count(*)
from express.invoices i
group by i.sub_type; return?
Also, try use the {noformat}{noformat} tag when posting examples/execution plans etc.
See: HOW TO: Post a SQL statement tuning request - template posting for more tuning instructions.
It'll make a big difference:
SELECT i.ID
FROM EXPRESS.invoices i
WHERE i.nbr IS NOT NULL
AND i.EXTRACT_BATCH IS NULL
AND i.SUB_TYPE='COD'
Explain Plan from Toad
SELECT STATEMENT CHOOSECost: 77 Bytes: 6,98 Cardinality: 349
4 PX COORDINATOR
3 PX SEND QC (RANDOM) SYS.:TQ10000 Cost: 77 Bytes: 6,98 Cardinality: 349
2 PX BLOCK ITERATOR Cost: 77 Bytes: 6,98 Cardinality: 349
1 INDEX FAST FULL SCAN INDEX EXPRESS.INVC_TRANS_INDX Cost: 77 Bytes: 6,98 Cardinality: 349
Execution Plan from Sqlplus
| Id | Operation | Name | Rows | Bytes | Cost | TQ |IN-OUT| PQ Distrib |
| 0 | SELECT STATEMENT | | 349 | 6980 | 77 | | | |
| 1 | PX COORDINATOR | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 349 | 6980 | 77 | Q1,00 | P->S | QC (RAND) |
| 3 | PX BLOCK ITERATOR | | 349 | 6980 | 77 | Q1,00 | PCWC | |
|* 4 | INDEX FAST FULL SCAN| INVC_TRANS_INDX | 349 | 6980 | 77 | Q1,00 | PCWP | |
Predicate Information (identified by operation id):
4 - filter("I"."NBR" IS NOT NULL AND "I"."EXTRACT_BATCH" IS NULL AND "I"."SUB_TYPE"='COD')
Note
- 'PLAN_TABLE' is old version
- cpu costing is off (consider enabling it)
Statistics
141 recursive calls
0 db block gets
5568 consistent gets
0 physical reads
0 redo size
319 bytes sent via SQL*Net to client
458 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
0 rows processed
Instance Efficiency Percentages (Target 100%)
Buffer Nowait %: 100.00
Redo NoWait %: 100.00
Buffer Hit %: 99.70
In-memory Sort %: 100.00
Library Hit %: 99.81
Soft Parse %: 99.77
Execute to Parse %: 63.56
Latch Hit %: 90.07
Parse CPU to Parse Elapsd %: 0.81
% Non-Parse CPU: 98.88
Top 5 Timed Events
Event Waits Time(s) Avg Wait(ms) % Total Call Time Wait Class
latch: library cache 12,626 16,757 1,327 62.6 Concurrency
CPU time 5,712 21.Mar
latch: session allocation 1,848,987 1,99 1 07.Nis Other
PX Deq Credit: send blkd 1,242,265 981 1 03.Tem Other
PX qref latch 1,405,819 726 1 02.Tem Other -
Regarding SQL performance Analyzer
Hi,
I am working on oracle 11g new feature Real application testing.I want to test the performance of DB after setting DB_BLOCK_CHECKSUM and DB_BLOCK_CHECKING parameters to TRUE(currently FALSE) by using SQL performance Analyzer. I have collected the SQL Tuning Sets from production and imported in Test server(replica of PROD), and will test the same in Test server only.
Will it be feasible to check by using SPA ? My concern is that in Test environment concurrent transaction and DML operation will not be done .
Please help me out on this .
Rgds,
AtHi,
Look at http://download.oracle.com/docs/cd/B28359_01/server.111/e12253/dbr_intro.htm
Regards, -
WHAT IS DIFFERENCE BETWEEN DEVELOPER 2000 AND SQL DEVELOPER?
Hello Everyone.I am new to oracle and want to know the difference between developer 2000 and sql developer in oracle.Pls?
Developer 2000 is an application for making webforms that will be served on an Application Server, and accessed by the end users through an applet in their webbrowser.
SQL Developer is a tool for administrating and manipulating data and structure of your database. Like a GUI version of SQL*Plus, not advisable for end users.
Regards,
K. -
Get parameters only specifiy to SQL Performance
Oracle Version:11.2.0.3/ OEL 6.1
For diagnosing a performance issue related to a batch run, our application teams wants to know all session/system level parameter that affects SQL performance.
I can't simply give an output of v$parameter.name and v$parameter.value as there will lots of parameter not related SQL performance like
diagnostic_dest
log_archive_dest_1
deferred_segment_creation
control_files
background_core_dump
I am looking for only those parameters which are relevant to SQL performance, like
optimizer_mode
statistics_level
memory_target
sga_targetPlease see relevant sections in Performance and Tuning Guide:
http://docs.oracle.com/cd/E11882_01/server.112/e16638/build_db.htm#g23964
http://docs.oracle.com/cd/E11882_01/server.112/e16638/optimops.htm#BABDECGJ
Maybe you are looking for
-
How to move one screen to another screen Webdynpro ?
Hi, How to move from one screen to another screen Webdypro ? Best Regards, Kishore
-
Hi, I plugged my iPhone for the first time to my computer. The iTunes screen automatically came up and asked if I wanted to register/set-up my iPhone as new phone or using the backup from my iPod. Without knowing what was going to happen, I clicked o
-
My computer is killing my iPod!
Heyo, I have a fifth-generation iPod. About three weeks ago, my computer suddenly decided to stop recognizing my iPod when it was connected and draining the battery for apparently no reason. I tried everything - restarting, rebooting, restoring, upda
-
Need to find the memory address of a buffer or string
Two basic questions: -How does LabVIEW treat the concept of a "buffer"? Isn't it just a string wired from one block to another? -How can I find the address of a memory location or buffer location? I am using the Call Shared Library Node to call two
-
Error in codepage mapping for source system
Hi Experts, I am getting the following error while loading data from ECC only for Account COPA datasource. Error in codepage mapping for source system. Error text: Message no. RSDS_ACCESS013 Regards, Sandeep Sharma