February 1, 2010 at 2:10 am
I have the following table:
The table stores daily stock market prices for over 8000 instruments(stocks) per day
DateKey INT PK
InstrumentKey INT PK
Op FLOAT
Cl FLOAT
Hi FLOAT
Lo FLOAT
WAVG FLOAT
Vol FLOAT
Status CHAR(1)
Cap FLOAT
I use a composite key (DateKey,Instrumentkey) because one instrument can only have one record per day. it currently contains over 13,000,000 records
The problem I came across is that selecting data from this table takes over 5min, considering no one else is using the same database or server. Last week running a normal SELECT query with a basic WHERE clause, the SQL Server basically slowed down to a snails pace. Resulting in some users unable to connect to SQL Server.
The index on this table was created with the composite key and is set to clustered.
What can i possibly do so speed up the table and improve performance.
[font="Courier New"]-----------------------------------------------------------------------------------------------------------------------
😀 Arguing with Programmers are like wrestling a pig in mud, soon you realize the pig is enjoying it. 😀
-----------------------------------------------------------------------------------------------------------------------[/font]
February 1, 2010 at 2:43 am
Check fragmentaion on the table. It should improve the speed after attaining good fragmention.
February 1, 2010 at 2:48 am
The Total Fragmentation is currently 15.2%.
I have to add that last week over 10,000,000 was added with SSIS package from 1500 csv files.
[font="Courier New"]-----------------------------------------------------------------------------------------------------------------------
😀 Arguing with Programmers are like wrestling a pig in mud, soon you realize the pig is enjoying it. 😀
-----------------------------------------------------------------------------------------------------------------------[/font]
February 1, 2010 at 2:55 am
Yes..The table may be heavily fragmented. Perhaps you can Rebuild the clustered index offline, if you have nobody else using it.
There are quite a few threads in this forum which can provide info on rebuilding indexes..search and go thro them..
Regards,
Raj
February 1, 2010 at 3:07 am
/* SELECT query with a basic WHERE clause, the SQL Server basically slowed down to a snails pace. Resulting in some users unable to connect to SQL Server. */
Are u sure there was no other activity in SQL Server. If there is another heavy process eating up all the memory and CPU, then these issues can raise.
Also check the basic perfmon counters for CPU,Memory used,Disk quelength,
Lock wait,user Connections etc..
Also post ur system configuration.
Regards,
Raj
February 1, 2010 at 4:40 am
SERVER SPECS:
HP ProLiant ML350
2x Intel Xeon 2.50GHZ processors
4GIG RAM
I have reorganized, rebuild the index and even after that it still shows no change.
[font="Courier New"]-----------------------------------------------------------------------------------------------------------------------
😀 Arguing with Programmers are like wrestling a pig in mud, soon you realize the pig is enjoying it. 😀
-----------------------------------------------------------------------------------------------------------------------[/font]
February 1, 2010 at 5:07 am
hmm..I kind of guessed this when you said users cudnt connect..
Please check the following..(some of the stuff u wud have already checked..but anyways..)
> on System task manager check how much of CPU and memory SQL Server is consuming..
Is there any there process consuming CPU/memory... If nt wats overall usage and SQL'susage..
> Check the number of connections using sysprocesses. Also check how many are on runnable state.
how many are sleeping. USing last batch column check how long they have been sleeping.
> Check whether are there any queries that are blocking either using activity monitor on SSMS or using
query provided here :-http://strictlysql.blogspot.com/2009/07/check-currently-running-statements.html
> using perfmon check the values of the following counters.
Physical disk . avg disk queue length
Processor queue length
SQL Server Locks -> Average wait time
Buffer manager obj -> Buffer cache hit ratio
SQL Server memory mananger -> Total Server Memory
Target Server Memory
I believe u have set max number of connections ServerProperties ->connections ( default setting of 0 )..
Regards,
Raj
February 1, 2010 at 9:42 am
Please post the query, table definitions, index definitions and execution plan as per http://www.sqlservercentral.com/articles/SQLServerCentral/66909/
Gail Shaw
Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability
February 1, 2010 at 9:54 am
first off, do as Gail says. It will help greatly in the event that your query isn't covered by an index. We'll be able to help then.
Also, 13 mil isn't that many records for an appropriate disk volume (SAN or other striped disk)
As far as users being locked out, it's probably a combination of the isolation level you're choosing and the lack of an appropriate index that covers the columns in your query.
This spiffy article can explain Isolation levels and you can choose one that's best.
http://www.sql-server-performance.com/articles/dba/isolation_levels_2005_p1.aspx
Nothing performs better than read uncommitted, but understand what you're getting with read uncommitted.
Good luck with that part, and send your query and execution plans as Gail suggests.
Craig Outcalt
February 1, 2010 at 10:09 am
roelofsleroux (2/1/2010)
I have the following table:The table stores daily stock market prices for over 8000 instruments(stocks) per day
DateKey INT PK
InstrumentKey INT PK
Op FLOAT
Cl FLOAT
Hi FLOAT
Lo FLOAT
WAVG FLOAT
Vol FLOAT
Status CHAR(1)
Cap FLOAT
I use a composite key (DateKey,Instrumentkey) because one instrument can only have one record per day. it currently contains over 13,000,000 records
The problem I came across is that selecting data from this table takes over 5min, considering no one else is using the same database or server. Last week running a normal SELECT query with a basic WHERE clause, the SQL Server basically slowed down to a snails pace. Resulting in some users unable to connect to SQL Server.
The index on this table was created with the composite key and is set to clustered.
What can i possibly do so speed up the table and improve performance.
Can you confirm that where clause does NOT have any other columns but DateKey and InstrumentKey ?
February 1, 2010 at 3:16 pm
You may also need to think about Statistics, i.e. with such a large data load you should set a job to update statistics, also check to see if auto update statistics is enabled, this may have kicked off the extra SQL load you have seen.
This article describes more:
February 1, 2010 at 5:09 pm
GilaMonster (2/1/2010)
Please post the query, table definitions, index definitions and execution plan as per http://www.sqlservercentral.com/articles/SQLServerCentral/66909/
This will probably be something fairly easy to fix but unless you can help us help you by doing what Gail suggests above, all we can do is make suggestions.
As SQLBot suggests, 13 million rows really isn't that big and most queries should be nearly instantaneous... we just can't help unless we can see.
--Jeff Moden
Change is inevitable... Change for the better is not.
February 1, 2010 at 7:48 pm
@s-2 t e f
He has Rebuild the index which implies stats are updated.
Also, the Original poster claims that people cant login or access the server which implies the problem is not just a missing index on 13 million row table.
Regards,
Raj
February 1, 2010 at 10:01 pm
I agree with that. That's why we want to see that slow query and the execution plan for it. We're just shooting in the dark until that happens.
--Jeff Moden
Change is inevitable... Change for the better is not.
February 1, 2010 at 10:09 pm
check the query execution plan and based on that you will come to know the reason probably.
kshitij kumar
kshitij@krayknot.com
www.krayknot.com
Viewing 15 posts - 1 through 15 (of 34 total)
You must be logged in to reply to this topic. Login to reply