When we need to insert data(table) to database (NO RAC and RAC) faster...,
we should have disk i/o faster. that's a good idea (example: solid state or make raid 1+0)

INSERT INTO XXX VALUES(a,b,...);

Anyway What should we do on Oracle Database?

- insert nologging
- No Archivelog
- No index
- Use big block size(example 16k, 32k)
- Concern about redo log, if use logging

What about your idea to improve this case?

Tags: insert, table

Views: 3311

Reply to This

Replies to This Discussion

Hi ,

im using "insert /*+ APPEND */" hint option and its good as comapre to others.

Faheem.
if i insert with sub query, append hint, that is good.

It's not good with INSERT INTO XXX VALUES (.....,...)
Example:

begin
for x in 1 ..100
loop
insert into t01 values(x, 100);
commit;
end loop;
end;
/

Elapsed: 00:00:00.16



begin
for x in 1 ..100
loop
insert /*+ append */ into t01 values(x, 100);
commit;
end loop;
end;
/

Elapsed: 00:00:01.15
Hi Surachart,

Well there are many answers and my experiences have shown that it always depends on the use-cases.

What you can do to make inserts faster:

1) Bulking (if you want to make it fast, do bulking!) which reduces commits and commit time
2) Enough ITL on the block (INITRANS)
3) Depending on the size of a row: Blocksize, PCTFREE
4) No Indexing
5) No integrity checks (Foreign keys, not null constraints)
6) Buffer cache (if it's to small you'll early end up with I/O)

And the list goes on....

APPEND hint is also very useful on inserts because it's using DIRECT-PATH inserts which will append the data simply on the table. But be aware the unused space by the table will then not be filled up!

Also not forget paritioning!

Regards,

Gerald
Hi Surachart,

Gerald made an excellent exposition and I totally agree withg him.
From my personal experience I would recommend partitioning. But my experience is in the telecom world were we could easily make 20/30 million inserts per hour and some of these tables were partitioned by (day,hour) to improve insert speed, we had indexes and we could not use /*+append*/ because of backup restrictions.
If you need real insight or your specific case, may be you could post your full scenario.

Regards,
Filipe
I suggest before any guesses first you take an 10046 Level 8 SQL Trace and analyse it with tkprof to see where you spend the time with your inserts.

ps: If there are triggers they also might be a problem area.
Hi, do you have a column in the table to store the radius server id (i.ex server1, server2, ...)?
If so, is it indexed? Is it partitioned?
maybe you could consider partitioning the table according to the server. For instance
if table looks like this
c1, c2, radius_server_id, ...

You could use range or list partition by radious_server and the on each server, when you issue the insert statement you could specify the corresponding server id.

create table abc (c1 number,c2 number, radius_server varchar2(14)) partition by list (radius_server) (
PARTITION s1_server VALUES ('s1') ,
PARTITION s2_server VALUES ('s2') )
;

insert into abc partition (s2_server) values(1,2,'s2') ;
If the table is indexed by the server_id column, then using partitioning on that table and converting the index to local would produce even better results on insert.
Cheers,
Filipe
Thank You for your suggestion. that's a good idea.

Actually this table has kept about account, nas ip, etc... when users log on...
I have 4 indexes. I plan to recreate hash partition, But I think hash can not to improve.

Perhaps I might recreate with range(month) partition.

About list partition, I have no idea to choose about column... now.



Do you have any idea?
If your planning to rebuilt table and add partitions, i don't think hash would do the trick on this one...
I stand by adding a range or list partition using a column server_id and forcing each server to specify its own partition while doing the insert.

insert into abc partition (s2_server) values(1,2,'s2') ;
thank you.

And? sql statement, block size, init_trans, pct_free and freelists...

How do you think? Any Suggestion about them?


Surachart

RSS

Oracle Community On

I'm not a fan of advertising, and so I will not be including any advertisements on OracleCommunity.net. However, managing this community does not come without cost! If you are willing to donate to help pay for the monthly community fees and domain services I accept Bitcoin and PayPal donations.

Donate Bitcoins

Badge

Loading…

Blog Posts

Why Consider Microsoft Exchange Server 2013 For Your Organization?

The Microsoft Exchange Server 2013 is packed with features that make Server management efficient, effective and easy. The following article takes a look at the features of this Microsoft product and how it can help organizations manage their servers in a better way. Read on to know.



Server management can be a challenge for organizations and when taken lightly can cost organizations a fortune. Managing huge databases, confidential and sensitive information…

Continue

Posted by Michael Warne on March 28, 2015 at 2:08am

IBM WODM Online Training @VirtualNuggets:

Web URL       :  http://www.virtualnuggets.com/ibm-websphere-odm.html

Email               : info@virtualnuggets com

Contact           :+1-707 666 8949(USA)                     

                        : +91-888 556 0202(India) 

 

IBM WODM Online Training @VirtualNuggets:

 

           …

Continue

Posted by Thirupathi Myadaveni on March 16, 2015 at 3:30am

Oracle Reports as PL/SQL Stored Procedures

Would anyone be interested in a solution & framework that can create Reports generated as Text or HTML output using PL/SQL as the only programming language?



This would be useful for those developers that have skills in PL/SQL and would like to leverage the use of basic & advanced SQL & PL/SQL to create Database Stored Reports and call them within any preferred front-end or back-end technology.



In case those who are familiar with RPT/RPF (Oracle's first…

Continue

Posted by LongBridge Corporation on March 10, 2015 at 2:36am

Data sync between 2 servers

Say i have 2 servers named server01 and server02.
server01 is my database server and server02 for a backup server.
Now how can I make a connection to save all data server01 to server02(only database data)
Note: both servers are connected to a LAN network.

Posted by Shakaouth Shanto on March 2, 2015 at 9:17am — 1 Comment

© 2015   Created by Steve Karam.

Badges  |  Report an Issue  |  Terms of Service