Showing posts with label row. Show all posts
Showing posts with label row. Show all posts

Wednesday, March 21, 2012

DTS- Data Driven Query Task

I use a data driven query task to perform row updates along with appending row data to a text file. In the source I use 'select top 1000 field1, ..., fieldn from table'. The package hangs when executing the data driven task. If I reduce the return count to 'select top 100...' the package execute with no problems. I can do that 10 times, with no problems. But anything more then 100 will hang the package at that task. Please help!

Thanks,
MoniqueTake help from PROFILER and see where it hangs.

The other method of limiting the size of a result set is to execute a SET ROWCOUNT n statement before executing a statement. SET ROWCOUNT differs from TOP.

The TOP clause applies to the single SELECT statement in which it is specified. SET ROWCOUNT remains in effect until another SET ROWCOUNT statement is executed, such as SET ROWCOUNT 0 to turn the option off.

Monday, March 19, 2012

DTS Buffer times out when inserting to sql destination

I have a lookup component which determines if a record is to be updated or inserted. If it does not find match for a particular row that row is sent to the error output of the lookup component from where it is bulk inserted into the database using sql server destination.

Now the problem is when there are no rows to be inserted, the DTS buffer times out throwing an error. However if i increase the timeout or set it to 0, it hangs on indefinitely.

Is there a way that i can ignore the sql server destination when there are no rows to be inserted.

Thanks

[SQL Server Destination [590]] Error: An OLE DB error has occurred. Error code: 0x80040E14. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E14 Description: "Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".". An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E14 Description: "The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.". An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E14 Description: "Reading from DTS buffer timed out.".

What happens when you replace the SQL Server destination with an OLE DB destination?|||

Amna wrote:

I have a lookup component which determines if a record is to be updated or inserted. If it does not find match for a particular row that row is sent to the error output of the lookup component from where it is bulk inserted into the database using sql server destination.

Now the problem is when there are no rows to be inserted, the DTS buffer times out throwing an error. However if i increase the timeout or set it to 0, it hangs on indefinitely.

Is there a way that i can ignore the sql server destination when there are no rows to be inserted.

Thanks

[SQL Server Destination [590]] Error: An OLE DB error has occurred. Error code: 0x80040E14. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E14 Description: "Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".". An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E14 Description: "The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.". An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E14 Description: "Reading from DTS buffer timed out.".

How big is the data set being processed?

It is likekly the SQL Server destination is trying to insert the whole data set in one transaction. If you use OLE DB DEtination you will have more control over the commit and batch size.

|||The problem is when there are NO records. When there are records to be inserted, SQL server destination works fine. But when there are no records, it kinds of start waiting for the records and then times out. Any ideas?|||

Hi Amna,

feel free to open a bug for this on the connect site.

In the meantime, you should use the OLE DB destination with Fast Load. It should not have a significant impact on the performance.

Thanks,

-Bob

DTS Buffer times out when inserting to sql destination

I have a lookup component which determines if a record is to be updated or inserted. If it does not find match for a particular row that row is sent to the error output of the lookup component from where it is bulk inserted into the database using sql server destination.

Now the problem is when there are no rows to be inserted, the DTS buffer times out throwing an error. However if i increase the timeout or set it to 0, it hangs on indefinitely.

Is there a way that i can ignore the sql server destination when there are no rows to be inserted.

Thanks

[SQL Server Destination [590]] Error: An OLE DB error has occurred. Error code: 0x80040E14. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E14 Description: "Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".". An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E14 Description: "The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.". An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E14 Description: "Reading from DTS buffer timed out.".

What happens when you replace the SQL Server destination with an OLE DB destination?|||

Amna wrote:

I have a lookup component which determines if a record is to be updated or inserted. If it does not find match for a particular row that row is sent to the error output of the lookup component from where it is bulk inserted into the database using sql server destination.

Now the problem is when there are no rows to be inserted, the DTS buffer times out throwing an error. However if i increase the timeout or set it to 0, it hangs on indefinitely.

Is there a way that i can ignore the sql server destination when there are no rows to be inserted.

Thanks

[SQL Server Destination [590]] Error: An OLE DB error has occurred. Error code: 0x80040E14. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E14 Description: "Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".". An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E14 Description: "The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.". An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E14 Description: "Reading from DTS buffer timed out.".

How big is the data set being processed?

It is likekly the SQL Server destination is trying to insert the whole data set in one transaction. If you use OLE DB DEtination you will have more control over the commit and batch size.

|||The problem is when there are NO records. When there are records to be inserted, SQL server destination works fine. But when there are no records, it kinds of start waiting for the records and then times out. Any ideas?|||

Hi Amna,

feel free to open a bug for this on the connect site.

In the meantime, you should use the OLE DB destination with Fast Load. It should not have a significant impact on the performance.

Thanks,

-Bob

Friday, March 9, 2012

DTS (Data Transformation Services)

Given:
I'm using a DTS Package to import data into a table. Each row from a text
file gets placed into a corresponding table.
What I need to do:
I'd like to modify the DTS Package to change the data saved to a table based
on values in the records from the text file. In otherwords,
if a value from the text file > 150 then set a value in the table to 1...
if a value from the text file < 150 then set a value in the table to 2.
Thank You
Hi Steve
You might be able to make this column a calculated one! e.g.
CREATE TABLE MyTest ( id int not null identity(1,1),
textval text,
size as DATALENGTH(textval) )
INSERT INTO MyTest ( Textval )
SELECT 'ABC'
UNION ALL SELECT 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBB'
UNION ALL SELECT
'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
SELECT * FROM mytest
UPDATE MyTest SET Textval = 'A' WHERE id = 3
SELECT * FROM mytest
CREATE TABLE MyTest2 ( id int not null identity(1,1),
textval text,
size as CASE WHEN DATALENGTH(textval) > 10 THEN 1 ELSE 0 END )
INSERT INTO MyTest2 ( Textval )
SELECT 'ABC'
UNION ALL SELECT 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBB'
UNION ALL SELECT
'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
SELECT * FROM mytest2
UPDATE MyTest2 SET Textval = 'A' WHERE id = 3
SELECT * FROM mytest2
Otherwise you can do this is an ActiveX transformation
http://www.sqldts.com/default.aspx?279,5
John
"SteveS" wrote:

> Given:
> I'm using a DTS Package to import data into a table. Each row from a text
> file gets placed into a corresponding table.
> What I need to do:
> I'd like to modify the DTS Package to change the data saved to a table based
> on values in the records from the text file. In otherwords,
> if a value from the text file > 150 then set a value in the table to 1...
> if a value from the text file < 150 then set a value in the table to 2.
> --
> Thank You
|||ActiveX transformation is the simple option for this one!!!
Thanks,
Sree
"SteveS" wrote:

> Given:
> I'm using a DTS Package to import data into a table. Each row from a text
> file gets placed into a corresponding table.
> What I need to do:
> I'd like to modify the DTS Package to change the data saved to a table based
> on values in the records from the text file. In otherwords,
> if a value from the text file > 150 then set a value in the table to 1...
> if a value from the text file < 150 then set a value in the table to 2.
> --
> Thank You

DTS (Data Transformation Services)

Given:
I'm using a DTS Package to import data into a table. Each row from a text
file gets placed into a corresponding table.
What I need to do:
I'd like to modify the DTS Package to change the data saved to a table based
on values in the records from the text file. In otherwords,
if a value from the text file > 150 then set a value in the table to 1...
if a value from the text file < 150 then set a value in the table to 2.
Thank YouHi Steve
You might be able to make this column a calculated one! e.g.
CREATE TABLE MyTest ( id int not null identity(1,1),
textval text,
size as DATALENGTH(textval) )
INSERT INTO MyTest ( Textval )
SELECT 'ABC'
UNION ALL SELECT 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBB
B'
UNION ALL SELECT
'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCC'
SELECT * FROM mytest
UPDATE MyTest SET Textval = 'A' WHERE id = 3
SELECT * FROM mytest
CREATE TABLE MyTest2 ( id int not null identity(1,1),
textval text,
size as CASE WHEN DATALENGTH(textval) > 10 THEN 1 ELSE 0 END )
INSERT INTO MyTest2 ( Textval )
SELECT 'ABC'
UNION ALL SELECT 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBB
B'
UNION ALL SELECT
'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCC'
SELECT * FROM mytest2
UPDATE MyTest2 SET Textval = 'A' WHERE id = 3
SELECT * FROM mytest2
Otherwise you can do this is an ActiveX transformation
http://www.sqldts.com/default.aspx?279,5
John
"SteveS" wrote:

> Given:
> I'm using a DTS Package to import data into a table. Each row from a text
> file gets placed into a corresponding table.
> What I need to do:
> I'd like to modify the DTS Package to change the data saved to a table bas
ed
> on values in the records from the text file. In otherwords,
> if a value from the text file > 150 then set a value in the table to 1...
> if a value from the text file < 150 then set a value in the table to 2.
> --
> Thank You|||ActiveX transformation is the simple option for this one!!!
Thanks,
Sree
"SteveS" wrote:

> Given:
> I'm using a DTS Package to import data into a table. Each row from a text
> file gets placed into a corresponding table.
> What I need to do:
> I'd like to modify the DTS Package to change the data saved to a table bas
ed
> on values in the records from the text file. In otherwords,
> if a value from the text file > 150 then set a value in the table to 1...
> if a value from the text file < 150 then set a value in the table to 2.
> --
> Thank You

DTS (Data Transformation Services)

Given:
I'm using a DTS Package to import data into a table. Each row from a text
file gets placed into a corresponding table.
What I need to do:
I'd like to modify the DTS Package to change the data saved to a table based
on values in the records from the text file. In otherwords,
if a value from the text file > 150 then set a value in the table to 1...
if a value from the text file < 150 then set a value in the table to 2.
--
Thank YouHi Steve
You might be able to make this column a calculated one! e.g.
CREATE TABLE MyTest ( id int not null identity(1,1),
textval text,
size as DATALENGTH(textval) )
INSERT INTO MyTest ( Textval )
SELECT 'ABC'
UNION ALL SELECT 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'
UNION ALL SELECT
'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
SELECT * FROM mytest
UPDATE MyTest SET Textval = 'A' WHERE id = 3
SELECT * FROM mytest
CREATE TABLE MyTest2 ( id int not null identity(1,1),
textval text,
size as CASE WHEN DATALENGTH(textval) > 10 THEN 1 ELSE 0 END )
INSERT INTO MyTest2 ( Textval )
SELECT 'ABC'
UNION ALL SELECT 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'
UNION ALL SELECT
'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
SELECT * FROM mytest2
UPDATE MyTest2 SET Textval = 'A' WHERE id = 3
SELECT * FROM mytest2
Otherwise you can do this is an ActiveX transformation
http://www.sqldts.com/default.aspx?279,5
John
"SteveS" wrote:
> Given:
> I'm using a DTS Package to import data into a table. Each row from a text
> file gets placed into a corresponding table.
> What I need to do:
> I'd like to modify the DTS Package to change the data saved to a table based
> on values in the records from the text file. In otherwords,
> if a value from the text file > 150 then set a value in the table to 1...
> if a value from the text file < 150 then set a value in the table to 2.
> --
> Thank You|||ActiveX transformation is the simple option for this one!!!
Thanks,
Sree
"SteveS" wrote:
> Given:
> I'm using a DTS Package to import data into a table. Each row from a text
> file gets placed into a corresponding table.
> What I need to do:
> I'd like to modify the DTS Package to change the data saved to a table based
> on values in the records from the text file. In otherwords,
> if a value from the text file > 150 then set a value in the table to 1...
> if a value from the text file < 150 then set a value in the table to 2.
> --
> Thank You

Wednesday, March 7, 2012

DTS - Import Text file - varying column count

I receive a pipe delimited file without headers, and a header and trailer
row added as a check to each file. When I say header I don't mean column
headings, I mean a row of information that verifies the contents of the file
(example below)
The header info contains 5 columns, trailer info contains 7 columns, and the
normal data contains 28 columns.
The import succeeds when there is data (the header/trailer rows inserts NULL
into the remaining columns which is fine), however when there are no rows,
only the header and trailer rows are in the file. This fails as the columns
from 8 onwards are not there.
Firstly, can I make the DTS not "fail" if the full number of columns are
present? Currently I'm using "on completion" at the upload which continues
the DTS processing, but it fails at the end.
Second option - can I do a quick check to see if there are only 2 rows in
the file, and if so, maybe throw in a line of 27 pipes in to make the DTS
work, then delete the NULL row?
example file:
IMPORT_HEADER|HR|2006|04|18
datarows|etc|etc|28 columns in total
datarows|etc|etc|28 columns in total
datarows|etc|etc|28 columns in total
IMPORT_TRAILER|TR|2006|04|18|3|123.99
Thanks,Hi
You may find better advice in the DTS newsgroup
microsoft.public.sqlserver.dts , but you may be able to use an activeX
transformation to determine if you are reading a header row, data row or
footer assuming that the first column defines the row type.
Check out http://www.sqldts.com/default.aspx?279 and possibly
http://www.sqldts.com/default.aspx?266 and
http://www.sqldts.com/default.aspx?282. You should also be able to skip the
insertion of the header and trailer by returning DTSTransformStat_SkipInsert
or DTSTransformStat_NoMoreRows (if the row is the footer or the row is the
header and it says there are no rows within the file!) to make it cleaner
see the topic "DTSTransformStatus" in Books online for more.
John
"Ben Rum" <bundyrum75@.yahoo.com> wrote in message
news:OM91g.40851$Ph2.9628@.newsfe4-gui.ntli.net...
>I receive a pipe delimited file without headers, and a header and trailer
>row added as a check to each file. When I say header I don't mean column
>headings, I mean a row of information that verifies the contents of the
>file (example below)
> The header info contains 5 columns, trailer info contains 7 columns, and
> the normal data contains 28 columns.
> The import succeeds when there is data (the header/trailer rows inserts
> NULL into the remaining columns which is fine), however when there are no
> rows, only the header and trailer rows are in the file. This fails as the
> columns from 8 onwards are not there.
> Firstly, can I make the DTS not "fail" if the full number of columns are
> present? Currently I'm using "on completion" at the upload which continues
> the DTS processing, but it fails at the end.
> Second option - can I do a quick check to see if there are only 2 rows in
> the file, and if so, maybe throw in a line of 27 pipes in to make the DTS
> work, then delete the NULL row?
> example file:
> IMPORT_HEADER|HR|2006|04|18
> datarows|etc|etc|28 columns in total
> datarows|etc|etc|28 columns in total
> datarows|etc|etc|28 columns in total
> IMPORT_TRAILER|TR|2006|04|18|3|123.99
> Thanks,
>

Sunday, February 26, 2012

DTS - 5 million row load with indexes?

When loading large quantities between servers via DTS, I'm wondering
what's best to do with a table that has an index on it. It has about
10 columns and has a Primary key on the first 2 columns. Is the index
having to do extra work as the data load progresses? Would it be
better to load the data in an unindexed table, and then reindex it
using a tsql statement?The table that you are loading into - is that an empty table?
--
HTH,
Vyas, MVP (SQL Server)
SQL Server Articles and Code Samples @. http://vyaskn.tripod.com/
<unc27932@.yahoo.com> wrote in message
news:1122554831.421049.180070@.g14g2000cwa.googlegroups.com...
When loading large quantities between servers via DTS, I'm wondering
what's best to do with a table that has an index on it. It has about
10 columns and has a Primary key on the first 2 columns. Is the index
having to do extra work as the data load progresses? Would it be
better to load the data in an unindexed table, and then reindex it
using a tsql statement?|||Yes - empty table. But after the data comes in I'll be doing some
processing and will need the indexes.|||Good. If it is an empty table, then you could keep the clustered index and
still load the data quickly using BULK INSERT command, provided the data is
coming from a text file. BUKK INSERT command allows you to specify an ORDER
parameter which indicates the order of the clustered index columns. You just
have to make sure the text file is also sorted in the same order as the
clustered index.
If you are loading from a SQL Server database table, then I suggest you load
the data into the empty table, without any indexes. After the data load
create the clustered index.
Please search Google for the following keywords. There are some good
resources out there on this topic:
optimizing data load performance sql server
--
HTH,
Vyas, MVP (SQL Server)
SQL Server Articles and Code Samples @. http://vyaskn.tripod.com/
<unc27932@.yahoo.com> wrote in message
news:1122559237.926405.177340@.g49g2000cwa.googlegroups.com...
Yes - empty table. But after the data comes in I'll be doing some
processing and will need the indexes.|||It is in fact coming from another SQL Server, and you're right -
loading without the index perfomed much better. Then I recreated the
indexes and this did not take very long. Text file loading sounds
pretty fast too, but I would have to unload to text file from the
source sql server then load back in, so i figured this way would be
just as fast.|||unc27932@.yahoo.com wrote:
> It is in fact coming from another SQL Server, and you're right -
> loading without the index perfomed much better. Then I recreated the
> indexes and this did not take very long. Text file loading sounds
> pretty fast too, but I would have to unload to text file from the
> source sql server then load back in, so i figured this way would be
> just as fast.
If you're coming from another SQL Server, have you tried selecting the
data from the "other" table in the clustered index key order of the
destination table. That would likely help insert speed a lot and might
allow you to keep the clustered index in place without undue stress
during insert.
David Gugick
Quest Software
www.imceda.com
www.quest.com

DTS - 5 million row load with indexes?

When loading large quantities between servers via DTS, I'm wondering
what's best to do with a table that has an index on it. It has about
10 columns and has a Primary key on the first 2 columns. Is the index
having to do extra work as the data load progresses? Would it be
better to load the data in an unindexed table, and then reindex it
using a tsql statement?The table that you are loading into - is that an empty table?
--
HTH,
Vyas, MVP (SQL Server)
SQL Server Articles and Code Samples @. http://vyaskn.tripod.com/
<unc27932@.yahoo.com> wrote in message
news:1122554831.421049.180070@.g14g2000cwa.googlegroups.com...
When loading large quantities between servers via DTS, I'm wondering
what's best to do with a table that has an index on it. It has about
10 columns and has a Primary key on the first 2 columns. Is the index
having to do extra work as the data load progresses? Would it be
better to load the data in an unindexed table, and then reindex it
using a tsql statement?|||Yes - empty table. But after the data comes in I'll be doing some
processing and will need the indexes.|||Good. If it is an empty table, then you could keep the clustered index and
still load the data quickly using BULK INSERT command, provided the data is
coming from a text file. BUKK INSERT command allows you to specify an ORDER
parameter which indicates the order of the clustered index columns. You just
have to make sure the text file is also sorted in the same order as the
clustered index.
If you are loading from a SQL Server database table, then I suggest you load
the data into the empty table, without any indexes. After the data load
create the clustered index.
Please search Google for the following keywords. There are some good
resources out there on this topic:
optimizing data load performance sql server
--
HTH,
Vyas, MVP (SQL Server)
SQL Server Articles and Code Samples @. http://vyaskn.tripod.com/
<unc27932@.yahoo.com> wrote in message
news:1122559237.926405.177340@.g49g2000cwa.googlegroups.com...
Yes - empty table. But after the data comes in I'll be doing some
processing and will need the indexes.|||It is in fact coming from another SQL Server, and you're right -
loading without the index perfomed much better. Then I recreated the
indexes and this did not take very long. Text file loading sounds
pretty fast too, but I would have to unload to text file from the
source sql server then load back in, so i figured this way would be
just as fast.|||unc27932@.yahoo.com wrote:
> It is in fact coming from another SQL Server, and you're right -
> loading without the index perfomed much better. Then I recreated the
> indexes and this did not take very long. Text file loading sounds
> pretty fast too, but I would have to unload to text file from the
> source sql server then load back in, so i figured this way would be
> just as fast.
If you're coming from another SQL Server, have you tried selecting the
data from the "other" table in the clustered index key order of the
destination table. That would likely help insert speed a lot and might
allow you to keep the clustered index in place without undue stress
during insert.
--
David Gugick
Quest Software
www.imceda.com
www.quest.com

DTS - 5 million row load with indexes?

When loading large quantities between servers via DTS, I'm wondering
what's best to do with a table that has an index on it. It has about
10 columns and has a Primary key on the first 2 columns. Is the index
having to do extra work as the data load progresses? Would it be
better to load the data in an unindexed table, and then reindex it
using a tsql statement?
The table that you are loading into - is that an empty table?
HTH,
Vyas, MVP (SQL Server)
SQL Server Articles and Code Samples @. http://vyaskn.tripod.com/
<unc27932@.yahoo.com> wrote in message
news:1122554831.421049.180070@.g14g2000cwa.googlegr oups.com...
When loading large quantities between servers via DTS, I'm wondering
what's best to do with a table that has an index on it. It has about
10 columns and has a Primary key on the first 2 columns. Is the index
having to do extra work as the data load progresses? Would it be
better to load the data in an unindexed table, and then reindex it
using a tsql statement?
|||Yes - empty table. But after the data comes in I'll be doing some
processing and will need the indexes.
|||Good. If it is an empty table, then you could keep the clustered index and
still load the data quickly using BULK INSERT command, provided the data is
coming from a text file. BUKK INSERT command allows you to specify an ORDER
parameter which indicates the order of the clustered index columns. You just
have to make sure the text file is also sorted in the same order as the
clustered index.
If you are loading from a SQL Server database table, then I suggest you load
the data into the empty table, without any indexes. After the data load
create the clustered index.
Please search Google for the following keywords. There are some good
resources out there on this topic:
optimizing data load performance sql server
HTH,
Vyas, MVP (SQL Server)
SQL Server Articles and Code Samples @. http://vyaskn.tripod.com/
<unc27932@.yahoo.com> wrote in message
news:1122559237.926405.177340@.g49g2000cwa.googlegr oups.com...
Yes - empty table. But after the data comes in I'll be doing some
processing and will need the indexes.
|||It is in fact coming from another SQL Server, and you're right -
loading without the index perfomed much better. Then I recreated the
indexes and this did not take very long. Text file loading sounds
pretty fast too, but I would have to unload to text file from the
source sql server then load back in, so i figured this way would be
just as fast.
|||unc27932@.yahoo.com wrote:
> It is in fact coming from another SQL Server, and you're right -
> loading without the index perfomed much better. Then I recreated the
> indexes and this did not take very long. Text file loading sounds
> pretty fast too, but I would have to unload to text file from the
> source sql server then load back in, so i figured this way would be
> just as fast.
If you're coming from another SQL Server, have you tried selecting the
data from the "other" table in the clustered index key order of the
destination table. That would likely help insert speed a lot and might
allow you to keep the clustered index in place without undue stress
during insert.
David Gugick
Quest Software
www.imceda.com
www.quest.com

Sunday, February 19, 2012

DTC Error and unresolved SQL transaction

I have a procedure that reads data from linked server, a SQL2005 box, and
writes a row in a SQL2000 database. This procedure and configuration have
been working successfully for several years. This Sunday at 4am, this
procedure failed to complete, leaving an unresolved transaction. The symptom
is an insert on this table will timeout and fail because the unresolved
transaction has a lock on the table, and it shows as a blocking transaction.
Otherwise the database is functional and responsive. I have tried to KILL the
unresponsive process, but it wont clear, and just reads "KILLED/ROLLED BACK"
under the Activity Monitor command column.
I had this same problem last weekend, and re-starting the SQL Server Service
resolved the transaction. However, this is not a viable option during
production hours.
I tried using "KILL 51 WITH STATUSONLY", and it returned:
SPID 51: transaction rollback in progress. Estimated rollback completion:
100%. Estimated time remaining: 0 seconds.
I tried using KILL "51457D54-4FD7-408A-B5CA-AFF33D601D00"
It it cam back with:
Server: Msg 6114, Level 16, State 1, Line 1
Distributed transaction with UOW {51457D54-4FD7-408A-B5CA-AFF33D601D00} is
being used by another user. KILL command failed.
My two questions are:
1) Is there anyway to clear this blocking transaction short of re-starting
the SQL Server?
2) Is there anyway to figure out the root cause of the problem? I believe it
is some sort of MSDTC issue, that seems to only happen early on Sunday
mornings.
The following DTC error happened at exactly the same timestamp as the SQL
procedure was executed.
___________________________________________
Application Event Log Error
___________________________________________
Date7/1/2007 4:09:31 AM
LogWindows NT (Application)
SourceMSDTC
Category(3)
Event3221229829
ComputerSERVER002
Message
The description for Event ID '-1073737467' in Source 'MSDTC' cannot be
found. The local computer may not have the necessary registry information or
message DLL files to display the message, or you may not have permission to
access them. The following information is part of the
event:'.\iomgrclt.cpp:204, Pid: 1300, CmdLine: C:\WINNT\System32\msdtc.exe'
___________________________________________
Thank you in advance,
Ken
Hi Ken
"KenL" wrote:

> I have a procedure that reads data from linked server, a SQL2005 box, and
> writes a row in a SQL2000 database. This procedure and configuration have
> been working successfully for several years. This Sunday at 4am, this
> procedure failed to complete, leaving an unresolved transaction. The symptom
> is an insert on this table will timeout and fail because the unresolved
> transaction has a lock on the table, and it shows as a blocking transaction.
> Otherwise the database is functional and responsive. I have tried to KILL the
> unresponsive process, but it wont clear, and just reads "KILLED/ROLLED BACK"
> under the Activity Monitor command column.
> I had this same problem last weekend, and re-starting the SQL Server Service
> resolved the transaction. However, this is not a viable option during
> production hours.
> I tried using "KILL 51 WITH STATUSONLY", and it returned:
> SPID 51: transaction rollback in progress. Estimated rollback completion:
> 100%. Estimated time remaining: 0 seconds.
> I tried using KILL "51457D54-4FD7-408A-B5CA-AFF33D601D00"
> It it cam back with:
> Server: Msg 6114, Level 16, State 1, Line 1
> Distributed transaction with UOW {51457D54-4FD7-408A-B5CA-AFF33D601D00} is
> being used by another user. KILL command failed.
> My two questions are:
> 1) Is there anyway to clear this blocking transaction short of re-starting
> the SQL Server?
> 2) Is there anyway to figure out the root cause of the problem? I believe it
> is some sort of MSDTC issue, that seems to only happen early on Sunday
> mornings.
> The following DTC error happened at exactly the same timestamp as the SQL
> procedure was executed.
> ___________________________________________
> Application Event Log Error
> ___________________________________________
> Date7/1/2007 4:09:31 AM
> LogWindows NT (Application)
> SourceMSDTC
> Category(3)
> Event3221229829
> ComputerSERVER002
> Message
> The description for Event ID '-1073737467' in Source 'MSDTC' cannot be
> found. The local computer may not have the necessary registry information or
> message DLL files to display the message, or you may not have permission to
> access them. The following information is part of the
> event:'.\iomgrclt.cpp:204, Pid: 1300, CmdLine: C:\WINNT\System32\msdtc.exe'
> ___________________________________________
> Thank you in advance,
> Ken
I am not a MSDTC expert!!! Which process did you kill? I would expect a
process on the remote and local (originator) machines, and if there was an
order to be killed then local would be the first. If you stopped the DTC
services (NET STOP MSDTC) it should also rollback, but all distributed
transactions would be affected.
Is this the only time distributed transaction are used? If not then it would
narrow the issue down to either something with the process or something that
happens at that time. If the process is scheduled and works at other times
then it would rule the process out. If it is something that happens at a
specific time, check things like firewalls or antivirus updates/scans etc.
http://support.microsoft.com/default.aspx/kb/306843
Also look for blocking occuring during the process and how you handle errors
such as deadlocks in the code.
You could use DTCTester http://support.microsoft.com/kb/293799 or DTCPing to
check that DTC works ok.
John
|||Thank you for the response John.
<Is this the only time distributed transaction are used?
No, there are many procedures on this server that link to databases on
another server. The stored procedure that is failing runs hundreds of times
in a day. It had been reliable for years, up until last Sunday and this
Sunday when I have seen the two failures
<Which process did you kill?
I killed the spid on the SQL server initiating the link
I will review the kb's you referenced
Thanks,
Ken
"John Bell" wrote:

> Hi Ken
> "KenL" wrote:
>
> I am not a MSDTC expert!!! Which process did you kill? I would expect a
> process on the remote and local (originator) machines, and if there was an
> order to be killed then local would be the first. If you stopped the DTC
> services (NET STOP MSDTC) it should also rollback, but all distributed
> transactions would be affected.
> Is this the only time distributed transaction are used? If not then it would
> narrow the issue down to either something with the process or something that
> happens at that time. If the process is scheduled and works at other times
> then it would rule the process out. If it is something that happens at a
> specific time, check things like firewalls or antivirus updates/scans etc.
> http://support.microsoft.com/default.aspx/kb/306843
> Also look for blocking occuring during the process and how you handle errors
> such as deadlocks in the code.
> You could use DTCTester http://support.microsoft.com/kb/293799 or DTCPing to
> check that DTC works ok.
> John

Friday, February 17, 2012

DTC Error and unresolved SQL transaction

I have a procedure that reads data from linked server, a SQL2005 box, and
writes a row in a SQL2000 database. This procedure and configuration have
been working successfully for several years. This Sunday at 4am, this
procedure failed to complete, leaving an unresolved transaction. The symptom
is an insert on this table will timeout and fail because the unresolved
transaction has a lock on the table, and it shows as a blocking transaction.
Otherwise the database is functional and responsive. I have tried to KILL th
e
unresponsive process, but it wont clear, and just reads "KILLED/ROLLED BACK"
under the Activity Monitor command column.
I had this same problem last weekend, and re-starting the SQL Server Service
resolved the transaction. However, this is not a viable option during
production hours.
I tried using "KILL 51 WITH STATUSONLY", and it returned:
SPID 51: transaction rollback in progress. Estimated rollback completion:
100%. Estimated time remaining: 0 seconds.
I tried using KILL "51457D54-4FD7-408A-B5CA-AFF33D601D00"
It it cam back with:
Server: Msg 6114, Level 16, State 1, Line 1
Distributed transaction with UOW {51457D54-4FD7-408A-B5CA-AFF33D601D00}
is
being used by another user. KILL command failed.
My two questions are:
1) Is there anyway to clear this blocking transaction short of re-starting
the SQL Server?
2) Is there anyway to figure out the root cause of the problem? I believe it
is some sort of MSDTC issue, that seems to only happen early on Sunday
mornings.
The following DTC error happened at exactly the same timestamp as the SQL
procedure was executed.
________________________________________
___
Application Event Log Error
________________________________________
___
Date 7/1/2007 4:09:31 AM
Log Windows NT (Application)
Source MSDTC
Category (3)
Event 3221229829
Computer SERVER002
Message
The description for Event ID '-1073737467' in Source 'MSDTC' cannot be
found. The local computer may not have the necessary registry information o
r
message DLL files to display the message, or you may not have permission to
access them. The following information is part of the
event:'.\iomgrclt.cpp:204, Pid: 1300, CmdLine: C:\WINNT\System32\msdtc.exe'
________________________________________
___
Thank you in advance,
KenHi Ken
"KenL" wrote:

> I have a procedure that reads data from linked server, a SQL2005 box, and
> writes a row in a SQL2000 database. This procedure and configuration have
> been working successfully for several years. This Sunday at 4am, this
> procedure failed to complete, leaving an unresolved transaction. The sympt
om
> is an insert on this table will timeout and fail because the unresolved
> transaction has a lock on the table, and it shows as a blocking transactio
n.
> Otherwise the database is functional and responsive. I have tried to KILL
the
> unresponsive process, but it wont clear, and just reads "KILLED/ROLLED BAC
K"
> under the Activity Monitor command column.
> I had this same problem last weekend, and re-starting the SQL Server Servi
ce
> resolved the transaction. However, this is not a viable option during
> production hours.
> I tried using "KILL 51 WITH STATUSONLY", and it returned:
> SPID 51: transaction rollback in progress. Estimated rollback completion:
> 100%. Estimated time remaining: 0 seconds.
> I tried using KILL "51457D54-4FD7-408A-B5CA-AFF33D601D00"
> It it cam back with:
> Server: Msg 6114, Level 16, State 1, Line 1
> Distributed transaction with UOW {51457D54-4FD7-408A-B5CA-AFF33D601D0
0} is
> being used by another user. KILL command failed.
> My two questions are:
> 1) Is there anyway to clear this blocking transaction short of re-starting
> the SQL Server?
> 2) Is there anyway to figure out the root cause of the problem? I believe
it
> is some sort of MSDTC issue, that seems to only happen early on Sunday
> mornings.
> The following DTC error happened at exactly the same timestamp as the SQL
> procedure was executed.
> ________________________________________
___
> Application Event Log Error
> ________________________________________
___
> Date 7/1/2007 4:09:31 AM
> Log Windows NT (Application)
> Source MSDTC
> Category (3)
> Event 3221229829
> Computer SERVER002
> Message
> The description for Event ID '-1073737467' in Source 'MSDTC' cannot be
> found. The local computer may not have the necessary registry information
or
> message DLL files to display the message, or you may not have permission t
o
> access them. The following information is part of the
> event:'.\iomgrclt.cpp:204, Pid: 1300, CmdLine: C:\WINNT\System32\msdtc.exe
'
> ________________________________________
___
> Thank you in advance,
> Ken
I am not a MSDTC expert!!! Which process did you kill? I would expect a
process on the remote and local (originator) machines, and if there was an
order to be killed then local would be the first. If you stopped the DTC
services (NET STOP MSDTC) it should also rollback, but all distributed
transactions would be affected.
Is this the only time distributed transaction are used? If not then it would
narrow the issue down to either something with the process or something that
happens at that time. If the process is scheduled and works at other times
then it would rule the process out. If it is something that happens at a
specific time, check things like firewalls or antivirus updates/scans etc.
http://support.microsoft.com/default.aspx/kb/306843
Also look for blocking occuring during the process and how you handle errors
such as deadlocks in the code.
You could use DTCTester http://support.microsoft.com/kb/293799 or DTCPing to
check that DTC works ok.
John|||Thank you for the response John.
<Is this the only time distributed transaction are used?
No, there are many procedures on this server that link to databases on
another server. The stored procedure that is failing runs hundreds of times
in a day. It had been reliable for years, up until last Sunday and this
Sunday when I have seen the two failures
<Which process did you kill?
I killed the spid on the SQL server initiating the link
I will review the kb's you referenced
Thanks,
Ken
"John Bell" wrote:

> Hi Ken
> "KenL" wrote:
>
> I am not a MSDTC expert!!! Which process did you kill? I would expect a
> process on the remote and local (originator) machines, and if there was an
> order to be killed then local would be the first. If you stopped the DTC
> services (NET STOP MSDTC) it should also rollback, but all distributed
> transactions would be affected.
> Is this the only time distributed transaction are used? If not then it wou
ld
> narrow the issue down to either something with the process or something th
at
> happens at that time. If the process is scheduled and works at other times
> then it would rule the process out. If it is something that happens at a
> specific time, check things like firewalls or antivirus updates/scans etc.
> http://support.microsoft.com/default.aspx/kb/306843
> Also look for blocking occuring during the process and how you handle erro
rs
> such as deadlocks in the code.
> You could use DTCTester http://support.microsoft.com/kb/293799 or DTCPing
to
> check that DTC works ok.
> John

DTC Error and unresolved SQL transaction

I have a procedure that reads data from linked server, a SQL2005 box, and
writes a row in a SQL2000 database. This procedure and configuration have
been working successfully for several years. This Sunday at 4am, this
procedure failed to complete, leaving an unresolved transaction. The symptom
is an insert on this table will timeout and fail because the unresolved
transaction has a lock on the table, and it shows as a blocking transaction.
Otherwise the database is functional and responsive. I have tried to KILL the
unresponsive process, but it wont clear, and just reads "KILLED/ROLLED BACK"
under the Activity Monitor command column.
I had this same problem last weekend, and re-starting the SQL Server Service
resolved the transaction. However, this is not a viable option during
production hours.
I tried using "KILL 51 WITH STATUSONLY", and it returned:
SPID 51: transaction rollback in progress. Estimated rollback completion:
100%. Estimated time remaining: 0 seconds.
I tried using KILL "51457D54-4FD7-408A-B5CA-AFF33D601D00"
It it cam back with:
Server: Msg 6114, Level 16, State 1, Line 1
Distributed transaction with UOW {51457D54-4FD7-408A-B5CA-AFF33D601D00} is
being used by another user. KILL command failed.
My two questions are:
1) Is there anyway to clear this blocking transaction short of re-starting
the SQL Server?
2) Is there anyway to figure out the root cause of the problem? I believe it
is some sort of MSDTC issue, that seems to only happen early on Sunday
mornings.
The following DTC error happened at exactly the same timestamp as the SQL
procedure was executed.
___________________________________________
Application Event Log Error
___________________________________________
Date 7/1/2007 4:09:31 AM
Log Windows NT (Application)
Source MSDTC
Category (3)
Event 3221229829
Computer SERVER002
Message
The description for Event ID '-1073737467' in Source 'MSDTC' cannot be
found. The local computer may not have the necessary registry information or
message DLL files to display the message, or you may not have permission to
access them. The following information is part of the
event:'.\iomgrclt.cpp:204, Pid: 1300, CmdLine: C:\WINNT\System32\msdtc.exe'
___________________________________________
Thank you in advance,
KenHi Ken
"KenL" wrote:
> I have a procedure that reads data from linked server, a SQL2005 box, and
> writes a row in a SQL2000 database. This procedure and configuration have
> been working successfully for several years. This Sunday at 4am, this
> procedure failed to complete, leaving an unresolved transaction. The symptom
> is an insert on this table will timeout and fail because the unresolved
> transaction has a lock on the table, and it shows as a blocking transaction.
> Otherwise the database is functional and responsive. I have tried to KILL the
> unresponsive process, but it wont clear, and just reads "KILLED/ROLLED BACK"
> under the Activity Monitor command column.
> I had this same problem last weekend, and re-starting the SQL Server Service
> resolved the transaction. However, this is not a viable option during
> production hours.
> I tried using "KILL 51 WITH STATUSONLY", and it returned:
> SPID 51: transaction rollback in progress. Estimated rollback completion:
> 100%. Estimated time remaining: 0 seconds.
> I tried using KILL "51457D54-4FD7-408A-B5CA-AFF33D601D00"
> It it cam back with:
> Server: Msg 6114, Level 16, State 1, Line 1
> Distributed transaction with UOW {51457D54-4FD7-408A-B5CA-AFF33D601D00} is
> being used by another user. KILL command failed.
> My two questions are:
> 1) Is there anyway to clear this blocking transaction short of re-starting
> the SQL Server?
> 2) Is there anyway to figure out the root cause of the problem? I believe it
> is some sort of MSDTC issue, that seems to only happen early on Sunday
> mornings.
> The following DTC error happened at exactly the same timestamp as the SQL
> procedure was executed.
> ___________________________________________
> Application Event Log Error
> ___________________________________________
> Date 7/1/2007 4:09:31 AM
> Log Windows NT (Application)
> Source MSDTC
> Category (3)
> Event 3221229829
> Computer SERVER002
> Message
> The description for Event ID '-1073737467' in Source 'MSDTC' cannot be
> found. The local computer may not have the necessary registry information or
> message DLL files to display the message, or you may not have permission to
> access them. The following information is part of the
> event:'.\iomgrclt.cpp:204, Pid: 1300, CmdLine: C:\WINNT\System32\msdtc.exe'
> ___________________________________________
> Thank you in advance,
> Ken
I am not a MSDTC expert!!! Which process did you kill? I would expect a
process on the remote and local (originator) machines, and if there was an
order to be killed then local would be the first. If you stopped the DTC
services (NET STOP MSDTC) it should also rollback, but all distributed
transactions would be affected.
Is this the only time distributed transaction are used? If not then it would
narrow the issue down to either something with the process or something that
happens at that time. If the process is scheduled and works at other times
then it would rule the process out. If it is something that happens at a
specific time, check things like firewalls or antivirus updates/scans etc.
http://support.microsoft.com/default.aspx/kb/306843
Also look for blocking occuring during the process and how you handle errors
such as deadlocks in the code.
You could use DTCTester http://support.microsoft.com/kb/293799 or DTCPing to
check that DTC works ok.
John|||Thank you for the response John.
<Is this the only time distributed transaction are used?
No, there are many procedures on this server that link to databases on
another server. The stored procedure that is failing runs hundreds of times
in a day. It had been reliable for years, up until last Sunday and this
Sunday when I have seen the two failures
<Which process did you kill?
I killed the spid on the SQL server initiating the link
I will review the kb's you referenced
Thanks,
Ken
"John Bell" wrote:
> Hi Ken
> "KenL" wrote:
> > I have a procedure that reads data from linked server, a SQL2005 box, and
> > writes a row in a SQL2000 database. This procedure and configuration have
> > been working successfully for several years. This Sunday at 4am, this
> > procedure failed to complete, leaving an unresolved transaction. The symptom
> > is an insert on this table will timeout and fail because the unresolved
> > transaction has a lock on the table, and it shows as a blocking transaction.
> > Otherwise the database is functional and responsive. I have tried to KILL the
> > unresponsive process, but it wont clear, and just reads "KILLED/ROLLED BACK"
> > under the Activity Monitor command column.
> > I had this same problem last weekend, and re-starting the SQL Server Service
> > resolved the transaction. However, this is not a viable option during
> > production hours.
> >
> > I tried using "KILL 51 WITH STATUSONLY", and it returned:
> > SPID 51: transaction rollback in progress. Estimated rollback completion:
> > 100%. Estimated time remaining: 0 seconds.
> >
> > I tried using KILL "51457D54-4FD7-408A-B5CA-AFF33D601D00"
> > It it cam back with:
> > Server: Msg 6114, Level 16, State 1, Line 1
> > Distributed transaction with UOW {51457D54-4FD7-408A-B5CA-AFF33D601D00} is
> > being used by another user. KILL command failed.
> >
> > My two questions are:
> > 1) Is there anyway to clear this blocking transaction short of re-starting
> > the SQL Server?
> > 2) Is there anyway to figure out the root cause of the problem? I believe it
> > is some sort of MSDTC issue, that seems to only happen early on Sunday
> > mornings.
> >
> > The following DTC error happened at exactly the same timestamp as the SQL
> > procedure was executed.
> > ___________________________________________
> > Application Event Log Error
> > ___________________________________________
> > Date 7/1/2007 4:09:31 AM
> > Log Windows NT (Application)
> >
> > Source MSDTC
> > Category (3)
> > Event 3221229829
> > Computer SERVER002
> >
> > Message
> > The description for Event ID '-1073737467' in Source 'MSDTC' cannot be
> > found. The local computer may not have the necessary registry information or
> > message DLL files to display the message, or you may not have permission to
> > access them. The following information is part of the
> > event:'.\iomgrclt.cpp:204, Pid: 1300, CmdLine: C:\WINNT\System32\msdtc.exe'
> > ___________________________________________
> >
> > Thank you in advance,
> > Ken
> I am not a MSDTC expert!!! Which process did you kill? I would expect a
> process on the remote and local (originator) machines, and if there was an
> order to be killed then local would be the first. If you stopped the DTC
> services (NET STOP MSDTC) it should also rollback, but all distributed
> transactions would be affected.
> Is this the only time distributed transaction are used? If not then it would
> narrow the issue down to either something with the process or something that
> happens at that time. If the process is scheduled and works at other times
> then it would rule the process out. If it is something that happens at a
> specific time, check things like firewalls or antivirus updates/scans etc.
> http://support.microsoft.com/default.aspx/kb/306843
> Also look for blocking occuring during the process and how you handle errors
> such as deadlocks in the code.
> You could use DTCTester http://support.microsoft.com/kb/293799 or DTCPing to
> check that DTC works ok.
> John