Showing posts with label script. Show all posts
Showing posts with label script. Show all posts

Tuesday, March 20, 2012

OLEDB performance and Script task

Hi enquiring whether is it more efficient to use OLEDB destination to update and extract all records from table A to tabl e B or use script task? And whether OleDB destination perform row by row update? Finally will data integrity be affected if i run delete, update and insert operations in the same data flow but extracting different sets of data each time from the 2 tables?

Unfortunately the answers to your first question is, it depends... Try testing them out for yourself as the speeds will vary by system and by the transforms that you are trying to push the data through.

OleDB destination will NOT preform a row by row UPDATE. The destination transformation is for inserting new rows, to do the update you will use the OLE DB Command Transformation.

Your data integrity should be fine for doing delete update and insert operations in the same data flow. Of course, this will vary depending on what transformations you do, when, how you get your data, etc... Try watching the Kimball video which is linked to on the front page for a good overview of the various ways of handling update / insert. Also, look at the thread for "check to see if a row exists, if so update, else insert" (also stickied on the front page).

|||

Thanks for the quick reply, but using OLE DB Command from what i understand is too expensive, so comparing OLE DB Command and Script task, script task would be a better choice in this aspect, can i say that at first glance?

|||If you have a large number of updates, you should write those updates to a temporary table and then once the data flow is done, issue an Execute SQL task to perform a batch update. That's the *best* option.|||

Hi,

Oh thanks for the advice, but just to verify this 'batch update', is it using a sql statement something like this

"update tablea set tablea.rows = tableb.rows from tablea, tableb (with the critriea)" and the temporary table contains only the records that need to be updated.

|||

garynkill23 wrote:

Hi,

Oh thanks for the advice, but just to verify this 'batch update', is it using a sql statement something like this

"update tablea set tablea.rows = tableb.rows from tablea, tableb (with the critriea)" and the temporary table contains only the records that need to be updated.

Yes

Monday, March 19, 2012

OLE-Db connection in Transformation Script Component

Hello,

Using the following documentation as a guide:

http://msdn2.microsoft.com/zh-cn/library/aa337080.aspx

I instantiated a new script component into an existing Data Flow in my SSIS project.

In the Script Transformation Editor, under the Connection Managers section, I associated the name dbConnManager to an already existing Connection Manager in the project.

My Connection Manager is of the type oOLEDB.

I then opened up the script designer and added the following lines of code where it said "Add your code here"

Dim myConnManager As IDTSConnectionManager90 = _

Me.Connections.ECFconnection

Dim dbConn As OleDb.OleDbConnection = _

CType(myConnManager.AcquireConnection(Nothing), OleDb.OleDbConnection)

When I test run the project I get the following error and the new script component is red:

Unable to cast COM object of type 'System.__ComObject' to class type 'System.Data.OleDb.OleDbConnection'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface.

I know the database connection works since I am using it in a component that executes before this new script component.

I am stuck...Any suggestions?

Unfortunately you cannot use a Connection Manager that returns a native type in managed code. This includes OLE DB and Excel.

This limitation is noted in BOL in
http://msdn2.microsoft.com/en-us/library/ms136018.aspx
and
http://msdn2.microsoft.com/en-us/library/aa337080.aspx

with this suggestion:

If you need to call the AcquireConnection method of a connection manager that returns an unmanaged object, use an ADO.NET connection manager. When you configure the ADO.NET connection manager to use an OLE DB provider, it connects by using the .NET Framework Data Provider for OLE DB. In this case, the AcquireConnection method returns a System.Data.OleDb.OleDbConnection instead of an unmanaged object. To configure an ADO.NET connection manager for use with an Excel data source, select the Microsoft OLE DB Provider for Jet, specify an Excel workbook, and then enter Excel 8.0 (for Excel 97 and later) as the value of Extended Properties on the All page of the Connection Manager dialog box.

-Doug

|||

Thank you. That was the nudge in the right direction that I needed.

Greg.

OLE-Db connection in Transformation Script Component

Hello,

Using the following documentation as a guide:

http://msdn2.microsoft.com/zh-cn/library/aa337080.aspx

I instantiated a new script component into an existing Data Flow in my SSIS project.

In the Script Transformation Editor, under the Connection Managers section, I associated the name dbConnManager to an already existing Connection Manager in the project.

My Connection Manager is of the type oOLEDB.

I then opened up the script designer and added the following lines of code where it said "Add your code here"

Dim myConnManager As IDTSConnectionManager90 = _

Me.Connections.ECFconnection

Dim dbConn As OleDb.OleDbConnection = _

CType(myConnManager.AcquireConnection(Nothing), OleDb.OleDbConnection)

When I test run the project I get the following error and the new script component is red:

Unable to cast COM object of type 'System.__ComObject' to class type 'System.Data.OleDb.OleDbConnection'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface.

I know the database connection works since I am using it in a component that executes before this new script component.

I am stuck...Any suggestions?

Unfortunately you cannot use a Connection Manager that returns a native type in managed code. This includes OLE DB and Excel.

This limitation is noted in BOL in
http://msdn2.microsoft.com/en-us/library/ms136018.aspx
and
http://msdn2.microsoft.com/en-us/library/aa337080.aspx

with this suggestion:

If you need to call the AcquireConnection method of a connection manager that returns an unmanaged object, use an ADO.NET connection manager. When you configure the ADO.NET connection manager to use an OLE DB provider, it connects by using the .NET Framework Data Provider for OLE DB. In this case, the AcquireConnection method returns a System.Data.OleDb.OleDbConnection instead of an unmanaged object. To configure an ADO.NET connection manager for use with an Excel data source, select the Microsoft OLE DB Provider for Jet, specify an Excel workbook, and then enter Excel 8.0 (for Excel 97 and later) as the value of Extended Properties on the All page of the Connection Manager dialog box.

-Doug

|||

Thank you. That was the nudge in the right direction that I needed.

Greg.

Monday, March 12, 2012

OLEDB Command giving error for decalre and set statements at the top of the SQL script

Hi All,

I have an OLEDB command in my package that has to execute some SQL script.

But when I declare and set a variable at the top of all code, The OLEDB gives an error in column mappings tab.

My DQL script is as shown below

DECLARE @.Cost AS money

SET @.Cost=?

--Some update statements a table

OLEDB Command works if write the declare and set statements after update statements. Like below. But I don’t need it.

--Some update statements a table

DECLARE @.Cost AS money

SET @.Cost=?

I also observer that,Oledb Command gives error for the code given below.

Just paste the following Script in OLEDB command, it gives error in column mapping tab

DECLARE @.Cost AS money

SET @.Cost=?

Any Idea on this behaviour?

Thanks in advance..

Is there a solution for this?
|||I don't think you can parameterize a SET statement like that. You should use a stored procedure.
|||

You can parameterize a SET statement provided you must have INSERT/UPDATE statements at the top.

for example :

INSET INTO table(col1)

values(?)

DECLARE @.VAR1 as int

Set @.VAR1=?

Works fine...

In my case ,I have only two queries,Do you think putting those in SP is a better option.

Saturday, February 25, 2012

OLE DB Command with property expression

Hi,

I am trying to use an OLE DB Command to run a different SQL command for each row in the data flow. I have a script component that builds the SQL command and puts it in a data flow variable, and a property expression in the data flow mapping [OLE DB Command].[Sql Command] to that variable.

The problem is that the OLE DB Command has a validation error, saying that "the command text was not set for the command object", and it doesn't run.

Did I miss anything? should I tell the OLE DB Command that the SQL command would come from expression? or is it a bug?

Thanks.

This validation error can be ignored if you set DataFlow task's DelayValidation to true. However, if you don't set parameters correctly, you may get parameters not bound error later on.

The way I do this is to set up a "dummy" OLEDBCommand first, with the good parameter binding(s), then during execution, the SqlCommand will be replaced by the my real expression value at runtime time - This will work under the assumption that the column metadata does not change overtime, which means, although the SqlCommand will change at runtime, the parameter bindings will remain the same.

Pls try it out and let me know if you have further questions.

Thanks

Wenyang

|||

Thanks.

Unfortunately, my sql commands differ in metadata. I can set it so that the parameters are in the same order for all commands, but some of the commands will not use all the parameters.

anyway, I tried what you suggested with a specific command, but it still doesn't work. the SQL command is deleted whenever I save the package (before running it), and then I get the same validation error.

Isn't there a straight forward solution? I mean, the package knows I set a property expression, otherwise it wouldn't delete the SQL command upon save. If so, why does it through the error? is it a bug?

|||

. It is by design the column metadata has to be the same for each SqlCommand expression value. This is the case not only for OLE DB Command, but also for other dataflow components when using expressions in similar conditions.

. I tried once again, as long as the expression is set correctly, the SqlCommand's value will be set to the expression evaluation result after saving my pkg(before execution). To me there is no bug here. Which version you are on? Did you set "DelayValidation" to true? Can you try again and make sure you set your expression at DataFlow task's "expression" property properly?

Thanks

Wenyang

|||

Thanks, you helped me find (part of) the problem.

I had the sql command set (using a property expression) to a variable that gets its value only during the data flow execution from a script component. the default value for the variable was empty, and when I saved the package it put the empty value into SqlCommand, which is not a valid value.

Setting DelayValidation to true didn't help here, since at the beginning of the data flow execution the variable is still empty, and I get the same validation error at runtime.

What did help is putting a dummy default value to the variable. now it is running without validation errors.

but...

it doesn't change the property of the OLE DB command :-(

the variable gets a different value for each processed row (I check it with a script), but the OLE DB command still runs the default value assigned to it at the beginning.

any ideas?

|||

Your scenario should work as well. Please provide the SqlServer version you are on and the detailed steps of how you set up the expression for OleDbCommand's SqlCommand property and I'll see how I can help.

Thanks

Wenyang

OLE DB Command with property expression

Hi,

I am trying to use an OLE DB Command to run a different SQL command for each row in the data flow. I have a script component that builds the SQL command and puts it in a data flow variable, and a property expression in the data flow mapping [OLE DB Command].[Sql Command] to that variable.

The problem is that the OLE DB Command has a validation error, saying that "the command text was not set for the command object", and it doesn't run.

Did I miss anything? should I tell the OLE DB Command that the SQL command would come from expression? or is it a bug?

Thanks.

This validation error can be ignored if you set DataFlow task's DelayValidation to true. However, if you don't set parameters correctly, you may get parameters not bound error later on.

The way I do this is to set up a "dummy" OLEDBCommand first, with the good parameter binding(s), then during execution, the SqlCommand will be replaced by the my real expression value at runtime time - This will work under the assumption that the column metadata does not change overtime, which means, although the SqlCommand will change at runtime, the parameter bindings will remain the same.

Pls try it out and let me know if you have further questions.

Thanks

Wenyang

|||

Thanks.

Unfortunately, my sql commands differ in metadata. I can set it so that the parameters are in the same order for all commands, but some of the commands will not use all the parameters.

anyway, I tried what you suggested with a specific command, but it still doesn't work. the SQL command is deleted whenever I save the package (before running it), and then I get the same validation error.

Isn't there a straight forward solution? I mean, the package knows I set a property expression, otherwise it wouldn't delete the SQL command upon save. If so, why does it through the error? is it a bug?

|||

. It is by design the column metadata has to be the same for each SqlCommand expression value. This is the case not only for OLE DB Command, but also for other dataflow components when using expressions in similar conditions.

. I tried once again, as long as the expression is set correctly, the SqlCommand's value will be set to the expression evaluation result after saving my pkg(before execution). To me there is no bug here. Which version you are on? Did you set "DelayValidation" to true? Can you try again and make sure you set your expression at DataFlow task's "expression" property properly?

Thanks

Wenyang

|||

Thanks, you helped me find (part of) the problem.

I had the sql command set (using a property expression) to a variable that gets its value only during the data flow execution from a script component. the default value for the variable was empty, and when I saved the package it put the empty value into SqlCommand, which is not a valid value.

Setting DelayValidation to true didn't help here, since at the beginning of the data flow execution the variable is still empty, and I get the same validation error at runtime.

What did help is putting a dummy default value to the variable. now it is running without validation errors.

but...

it doesn't change the property of the OLE DB command :-(

the variable gets a different value for each processed row (I check it with a script), but the OLE DB command still runs the default value assigned to it at the beginning.

any ideas?

|||

Your scenario should work as well. Please provide the SqlServer version you are on and the detailed steps of how you set up the expression for OleDbCommand's SqlCommand property and I'll see how I can help.

Thanks

Wenyang

Monday, February 20, 2012

Old machines works better than the higher-end new machine

Hi all,
My setup is : SQL Server 2000 SP3 on Windows 2000.
I used the profiler to run an sql script with 33,000 commands (mostly
inserts). I ran it on 4 setups and the results were strange. Lower-end
machines ran twice as fast as higher-end machines. I also ran out system
and not the script on all machines and got the same results.
Lower-end ? Motorola Pentium III 500. with 256 MB memory, one slow disk and
.
High-end machines had 1 Xeon processor, 1GB RAM, 3 fast disks.
Any help is greatly appreciated.
AviAssuming each insert is in a separate transaction, a likely cause of the
performance difference is that write caching is enabled on the older
machines but not on the high-end boxes. A synchronous log write is
required for each transaction so you'll need to wait for the i/o to
physically complete.
Write caching improve performance but the controller must guarantee that
data will eventually get written to disk with non-volatile (e.g. battery
backup) memory. Loss of log data may result in a corrupt database.
--
Hope this helps.
Dan Guzman
SQL Server MVP
--
SQL FAQ links (courtesy Neil Pike):
http://www.ntfaq.com/Articles/Index.cfm?DepartmentID=800
http://www.sqlserverfaq.com
http://www.mssqlserver.com/faq
--
"Avi" <rememberoti@.yahoo.com> wrote in message
news:uAoQT02rDHA.4092@.tk2msftngp13.phx.gbl...
> Hi all,
>
> My setup is : SQL Server 2000 SP3 on Windows 2000.
>
> I used the profiler to run an sql script with 33,000 commands (mostly
> inserts). I ran it on 4 setups and the results were strange.
Lower-end
> machines ran twice as fast as higher-end machines. I also ran out
system
> and not the script on all machines and got the same results.
>
> Lower-end - Motorola Pentium III 500. with 256 MB memory, one slow
disk and
> .
> High-end machines had 1 Xeon processor, 1GB RAM, 3 fast disks.
>
> Any help is greatly appreciated.
> Avi
>|||Hi,
Thanks for the reply. It is enabled on both machines..
"Dan Guzman" <danguzman@.nospam-earthlink.net> wrote in message
news:eMdns82rDHA.2260@.TK2MSFTNGP09.phx.gbl...
> Assuming each insert is in a separate transaction, a likely cause of the
> performance difference is that write caching is enabled on the older
> machines but not on the high-end boxes. A synchronous log write is
> required for each transaction so you'll need to wait for the i/o to
> physically complete.
> Write caching improve performance but the controller must guarantee that
> data will eventually get written to disk with non-volatile (e.g. battery
> backup) memory. Loss of log data may result in a corrupt database.
> --
> Hope this helps.
> Dan Guzman
> SQL Server MVP
> --
> SQL FAQ links (courtesy Neil Pike):
> http://www.ntfaq.com/Articles/Index.cfm?DepartmentID=800
> http://www.sqlserverfaq.com
> http://www.mssqlserver.com/faq
> --
> "Avi" <rememberoti@.yahoo.com> wrote in message
> news:uAoQT02rDHA.4092@.tk2msftngp13.phx.gbl...
> > Hi all,
> >
> >
> >
> > My setup is : SQL Server 2000 SP3 on Windows 2000.
> >
> >
> >
> > I used the profiler to run an sql script with 33,000 commands (mostly
> > inserts). I ran it on 4 setups and the results were strange.
> Lower-end
> > machines ran twice as fast as higher-end machines. I also ran out
> system
> > and not the script on all machines and got the same results.
> >
> >
> >
> > Lower-end - Motorola Pentium III 500. with 256 MB memory, one slow
> disk and
> > .
> >
> > High-end machines had 1 Xeon processor, 1GB RAM, 3 fast disks.
> >
> >
> >
> > Any help is greatly appreciated.
> >
> > Avi
> >
> >
>|||Different RAID levels?
--
Tibor Karaszi, SQL Server MVP
Archive at: http://groups.google.com/groups?oi=djq&as_ugroup=microsoft.public.sqlserver
"Avi" <rememberoti@.yahoo.com> wrote in message news:uh6ZtM5rDHA.2400@.tk2msftngp13.phx.gbl...
> Hi,
> Thanks for the reply. It is enabled on both machines..
> "Dan Guzman" <danguzman@.nospam-earthlink.net> wrote in message
> news:eMdns82rDHA.2260@.TK2MSFTNGP09.phx.gbl...
> > Assuming each insert is in a separate transaction, a likely cause of the
> > performance difference is that write caching is enabled on the older
> > machines but not on the high-end boxes. A synchronous log write is
> > required for each transaction so you'll need to wait for the i/o to
> > physically complete.
> >
> > Write caching improve performance but the controller must guarantee that
> > data will eventually get written to disk with non-volatile (e.g. battery
> > backup) memory. Loss of log data may result in a corrupt database.
> >
> > --
> > Hope this helps.
> >
> > Dan Guzman
> > SQL Server MVP
> >
> > --
> > SQL FAQ links (courtesy Neil Pike):
> >
> > http://www.ntfaq.com/Articles/Index.cfm?DepartmentID=800
> > http://www.sqlserverfaq.com
> > http://www.mssqlserver.com/faq
> > --
> >
> > "Avi" <rememberoti@.yahoo.com> wrote in message
> > news:uAoQT02rDHA.4092@.tk2msftngp13.phx.gbl...
> > > Hi all,
> > >
> > >
> > >
> > > My setup is : SQL Server 2000 SP3 on Windows 2000.
> > >
> > >
> > >
> > > I used the profiler to run an sql script with 33,000 commands (mostly
> > > inserts). I ran it on 4 setups and the results were strange.
> > Lower-end
> > > machines ran twice as fast as higher-end machines. I also ran out
> > system
> > > and not the script on all machines and got the same results.
> > >
> > >
> > >
> > > Lower-end - Motorola Pentium III 500. with 256 MB memory, one slow
> > disk and
> > > .
> > >
> > > High-end machines had 1 Xeon processor, 1GB RAM, 3 fast disks.
> > >
> > >
> > >
> > > Any help is greatly appreciated.
> > >
> > > Avi
> > >
> > >
> >
> >
>|||Thanks for the reply!
On both machines the Write Caching is enabled.
Any other ideas?
"Dan Guzman" <danguzman@.nospam-earthlink.net> wrote in message
news:eMdns82rDHA.2260@.TK2MSFTNGP09.phx.gbl...
> Assuming each insert is in a separate transaction, a likely cause of the
> performance difference is that write caching is enabled on the older
> machines but not on the high-end boxes. A synchronous log write is
> required for each transaction so you'll need to wait for the i/o to
> physically complete.
> Write caching improve performance but the controller must guarantee that
> data will eventually get written to disk with non-volatile (e.g. battery
> backup) memory. Loss of log data may result in a corrupt database.
> --
> Hope this helps.
> Dan Guzman
> SQL Server MVP
> --
> SQL FAQ links (courtesy Neil Pike):
> http://www.ntfaq.com/Articles/Index.cfm?DepartmentID=800
> http://www.sqlserverfaq.com
> http://www.mssqlserver.com/faq
> --
> "Avi" <rememberoti@.yahoo.com> wrote in message
> news:uAoQT02rDHA.4092@.tk2msftngp13.phx.gbl...
> > Hi all,
> >
> >
> >
> > My setup is : SQL Server 2000 SP3 on Windows 2000.
> >
> >
> >
> > I used the profiler to run an sql script with 33,000 commands (mostly
> > inserts). I ran it on 4 setups and the results were strange.
> Lower-end
> > machines ran twice as fast as higher-end machines. I also ran out
> system
> > and not the script on all machines and got the same results.
> >
> >
> >
> > Lower-end - Motorola Pentium III 500. with 256 MB memory, one slow
> disk and
> > .
> >
> > High-end machines had 1 Xeon processor, 1GB RAM, 3 fast disks.
> >
> >
> >
> > Any help is greatly appreciated.
> >
> > Avi
> >
> >
>|||Thanks for the reply,
The disks are not RAID configured. I even disabled two of them just to make
sure of that. I still get bad response.
Any other ideas are welocme!
"Tibor Karaszi" <tibor.please_reply_to_public_forum.karaszi@.cornerstone.se>
wrote in message news:u0G$Bo6rDHA.3436@.tk2msftngp13.phx.gbl...
> Different RAID levels?
> --
> Tibor Karaszi, SQL Server MVP
> Archive at:
http://groups.google.com/groups?oi=djq&as_ugroup=microsoft.public.sqlserver
>
> "Avi" <rememberoti@.yahoo.com> wrote in message
news:uh6ZtM5rDHA.2400@.tk2msftngp13.phx.gbl...
> > Hi,
> >
> > Thanks for the reply. It is enabled on both machines..
> >
> > "Dan Guzman" <danguzman@.nospam-earthlink.net> wrote in message
> > news:eMdns82rDHA.2260@.TK2MSFTNGP09.phx.gbl...
> > > Assuming each insert is in a separate transaction, a likely cause of
the
> > > performance difference is that write caching is enabled on the older
> > > machines but not on the high-end boxes. A synchronous log write is
> > > required for each transaction so you'll need to wait for the i/o to
> > > physically complete.
> > >
> > > Write caching improve performance but the controller must guarantee
that
> > > data will eventually get written to disk with non-volatile (e.g.
battery
> > > backup) memory. Loss of log data may result in a corrupt database.
> > >
> > > --
> > > Hope this helps.
> > >
> > > Dan Guzman
> > > SQL Server MVP
> > >
> > > --
> > > SQL FAQ links (courtesy Neil Pike):
> > >
> > > http://www.ntfaq.com/Articles/Index.cfm?DepartmentID=800
> > > http://www.sqlserverfaq.com
> > > http://www.mssqlserver.com/faq
> > > --
> > >
> > > "Avi" <rememberoti@.yahoo.com> wrote in message
> > > news:uAoQT02rDHA.4092@.tk2msftngp13.phx.gbl...
> > > > Hi all,
> > > >
> > > >
> > > >
> > > > My setup is : SQL Server 2000 SP3 on Windows 2000.
> > > >
> > > >
> > > >
> > > > I used the profiler to run an sql script with 33,000 commands
(mostly
> > > > inserts). I ran it on 4 setups and the results were strange.
> > > Lower-end
> > > > machines ran twice as fast as higher-end machines. I also ran out
> > > system
> > > > and not the script on all machines and got the same results.
> > > >
> > > >
> > > >
> > > > Lower-end - Motorola Pentium III 500. with 256 MB memory, one slow
> > > disk and
> > > > .
> > > >
> > > > High-end machines had 1 Xeon processor, 1GB RAM, 3 fast disks.
> > > >
> > > >
> > > >
> > > > Any help is greatly appreciated.
> > > >
> > > > Avi
> > > >
> > > >
> > >
> > >
> >
> >
>|||Avi wrote:
> Hi all,
> My setup is : SQL Server 2000 SP3 on Windows 2000.
> I used the profiler to run an sql script with 33,000 commands (mostly
> inserts). I ran it on 4 setups and the results were strange. Lower-end
> machines ran twice as fast as higher-end machines. I also ran out system
> and not the script on all machines and got the same results.
> Lower-end ? Motorola Pentium III 500. with 256 MB memory, one slow disk and
> High-end machines had 1 Xeon processor, 1GB RAM, 3 fast disks.
> Any help is greatly appreciated.
> Avi
Remember that Google is your friend. You are not alone in having this
kind of problem:
http://www.google.com/groups?as_q=new+machine+slower&num=10&as_scoring=r&hl=en&ie=UTF-8&oe=UTF-8&btnG=Google+Search&as_epq=&as_oq=&as_eq=&as_ugroup=microsoft.public.sqlserver.*&as_usubject=&as_uauthors=&as_umsgid=&lr=&as_drrb=q&as_qdr=&as_mind=12&as_minm=5&as_miny=1981&as_maxd=23&as_maxm=11&as_maxy=2003&safe=images
HARDWARE:
Ensure that there are no undetected hardware differences affecting your
benchmarks, e.g., that all memory is available to the processors, that
the hardware and network component interfaces to the systems are
equivalent, that you have exclusive use of the network while testing
(don't let Joe the Programmer download MP3s from your server during
tests). Once you have eliminated possible hardware variations then
reconsider the software element.
FILE I/O:
Test the machines on non-SQL I/O processing, i.e., file I/O. Perhaps the
"fast disks" aren't as fast as claimed. There are some posts here that
might be relevant:
http://www.google.com/groups?as_q=disk+formatting&num=10&as_scoring=r&hl=en&ie=UTF-8&oe=UTF-8&btnG=Google+Search&as_epq=&as_oq=&as_eq=&as_ugroup=microsoft.public.sqlserver.*&as_usubject=&as_uauthors=&as_umsgid=&lr=&as_drrb=q&as_qdr=&as_mind=12&as_minm=5&as_miny=1981&as_maxd=23&as_maxm=11&as_maxy=2003&safe=images
Good Luck,
Michael D. Kersey