delete statement in oracle enterprise stage

Post questions here relative to DataStage Enterprise/PX Edition for such areas as Parallel job design, Parallel datasets, BuildOps, Wrappers, etc.

Moderators: chulett, rschirm, roy

Post Reply
rgandra
Premium Member
Premium Member
Posts: 49
Joined: Mon Aug 02, 2004 9:31 am
Contact:

delete statement in oracle enterprise stage

Post by rgandra »

Hi,

I am using delete statement in oracle enterprise stage and write method is "delete" but the performance is very low i.e 50 rows per second.

my scenario is

dataset--->oracle enterprise stage


my delete statement is

delete from table where col1=ORCHESTRATE.col1

Can anybody help me.

Thanks,
rgandra
kcbland
Participant
Posts: 5208
Joined: Wed Jan 15, 2003 8:56 am
Location: Lutz, FL
Contact:

Post by kcbland »

Sure.

1. Look at the load on the server/nodes. Do you have full resources?
2. Look at the queries running against the table. Anybody doing stuff?
3. Look at the indexes. Are there a lot?
4. Look at the indexes. Are they partitioned and are they global or local?
5. Look at your table. Is it partitioned?
6. Look at your table. If it's partitioned, are your rows for deletion sitting in the same partition or are they scattered?
7. If your rows for deletion are in the same partition, are you supplying the partition key column in the delete statement?
8. Are you deleting using a column that's indexed?
9. Are you deleting using a wildcard delete, meaning the database is having to find matching rows, 1:n?

I couldn't even begin to help you without having all of these questions answered. Usually deletes are slow because the data is scattered around a large partitioned table with a bunch of indexes and the partition key is not supplied or you're hitting so many partitions that it doesn't matter.
Kenneth Bland

Rank: Sempai
Belt: First degree black
Fight name: Captain Hook
Signature knockout: right upper cut followed by left hook
Signature submission: Crucifix combined with leg triangle
kcbland
Participant
Posts: 5208
Joined: Wed Jan 15, 2003 8:56 am
Location: Lutz, FL
Contact:

Post by kcbland »

If I was to experiment, I would create a table that matches your dataset and run that dataset into the table. Enable parallel on that work table, alter your session enable parallel dml.

Then, check the explain plan on deleting from your big table where the matching key is in your work table. Something like:

Code: Select all

delete from mybigtable where mybigtable.keyvalue in (select keyvalue from my worktable)
Check the explain plan and see what happens. Hopefully, you'll see that most of the work happens inside a single partition. If not, I bet you'll find that this delete my just run a little fast. By bulk loading the deletes (or updates) into a work table and then letting the database parallel delete (or merge) the rows, you can get a pretty fast turnaround.
Kenneth Bland

Rank: Sempai
Belt: First degree black
Fight name: Captain Hook
Signature knockout: right upper cut followed by left hook
Signature submission: Crucifix combined with leg triangle
yatin.mittal
Participant
Posts: 20
Joined: Fri Oct 14, 2005 12:52 am

Re: delete statement in oracle enterprise stage

Post by yatin.mittal »

Hi

I think you can use data partiones and collector for this.
This may enhance your performance.
These are best suited for Multi - server systems but
this may help you in single server also.

With regards,
yatin Mittal

rgandra wrote:Hi,

I am using delete statement in oracle enterprise stage and write method is "delete" but the performance is very low i.e 50 rows per second.

my scenario is

dataset--->oracle enterprise stage


my delete statement is

delete from table where col1=ORCHESTRATE.col1

Can anybody help me.

Thanks,
rgandra
Yatin Mittal
Accenture Services Pvt. Ltd.
ray.wurlod
Participant
Posts: 54607
Joined: Wed Oct 23, 2002 10:52 pm
Location: Sydney, Australia
Contact:

Post by ray.wurlod »

Please explain how a data collector is supposed to help execute the SQL in an Oracle Enterprise stage? The whole rationale of the Enterprise stage types is to operate in parallel with partitioned tables. I believe that the advice you have given is at best misleading, but more probably totally incorrect.
IBM Software Services Group
Any contribution to this forum is my own opinion and does not necessarily reflect any position that IBM may hold.
rgandra
Premium Member
Premium Member
Posts: 49
Joined: Mon Aug 02, 2004 9:31 am
Contact:

Post by rgandra »

[quote="kcbland"]Sure.

1. Look at the load on the server/nodes. Do you have full resources?
2. Look at the queries running against the table. Anybody doing stuff?
3. Look at the indexes. Are there a lot?
4. Look at the indexes. Are they partitioned and are they global or local?
5. Look at your table. Is it partitioned?
6. Look at your table. If it's partitioned, are your rows for deletion sitting in the same partition or are they scattered?
7. If your rows for deletion are in the same partition, are you supplying the partition key column in the delete statement?
8. Are you deleting using a column that's indexed?
9. Are you deleting using a wildcard delete, meaning the database is having to find matching rows, 1:n?

I couldn't even begin to help you without having all of these questions answered. Usually deletes are slow because the data is scattered around a large partitioned table with a bunch of indexes and the partition key is not supplied or you're hitting so many partitions that it doesn't matter.[/quote]

Answers for the questios
1.parllel job with 4 nodes.yes, i do have full resources
2.I am the only one who is using that table
3,8.I have only one index and i am using the same index in where clause
4,5,6,7.No partition on table
9. No wild card deletion

can you please tell me to improve performance

Thanks,
rgandra
rgandra
Premium Member
Premium Member
Posts: 49
Joined: Mon Aug 02, 2004 9:31 am
Contact:

Post by rgandra »

My tables are in different data base so i can not write the following delete statement And there are no partitions on that


[quote="kcbland"]If I was to experiment, I would create a table that matches your dataset and run that dataset into the table. Enable parallel on that work table, alter your session enable parallel dml.

Then, check the explain plan on deleting from your big table where the matching key is in your work table. Something like:

[code]delete from mybigtable where mybigtable.keyvalue in (select keyvalue from my worktable)[/code]

Check the explain plan and see what happens. Hopefully, you'll see that most of the work happens inside a single partition. If not, I bet you'll find that this delete my just run a little fast. By bulk loading the deletes (or updates) into a work table and then letting the database parallel delete (or merge) the rows, you can get a pretty fast turnaround.[/quote]
kcbland
Participant
Posts: 5208
Joined: Wed Jan 15, 2003 8:56 am
Location: Lutz, FL
Contact:

Post by kcbland »

Okay, so it's the easiest table/index design possible. Unless you can check the explain plan, we're pretty much shooting ducks at night. Is the size of your row very large, meaning that you have enormous rollback usage? What is your commit rate?

If I were your DBA, I would do the whole work table, delete query, explain plan route because it's the only way to see what the database is trying to do. Also, it gives you a frame of reference for expected performance.

If you just ran 10K rows, is performance any better?
Kenneth Bland

Rank: Sempai
Belt: First degree black
Fight name: Captain Hook
Signature knockout: right upper cut followed by left hook
Signature submission: Crucifix combined with leg triangle
Post Reply