ما هي أسرع طريقة لإدراج البيانات في أوراكل الطاولة ؟

StackOverflow https://stackoverflow.com/questions/143872

  •  02-07-2019
  •  | 
  •  

سؤال

أنا أكتب بيانات التحويل في PL/SQL الذي يعالج البيانات الأحمال في الجدول.وفقا PL/SQL منشئ ملفات التعريف, واحدة من أبطأ أجزاء من التحويل الفعلي إدراج في الجدول الهدف.الجدول يحتوي على مؤشر واحد.

إعداد بيانات تحميل, لقد ملء متغير باستخدام rowtype من الجدول, ثم أدخله في الجدول مثل هذا:

insert into mytable values r_myRow;

يبدو أنني يمكن الحصول على الأداء عن طريق القيام بما يلي:

  • إيقاف تسجيل الخروج خلال إدراج
  • إدراج سجلات متعددة في وقت واحد

هي هذه الطرق المستحسن ؟ إذا كان الأمر كذلك ، ما هي الجملة?

هل كانت مفيدة؟

المحلول

انه من الأفضل أن تضاف بضع مئات الصفوف في وقت استخدام PL/SQL الجداول FORALL لربط إلى insert.للحصول على تفاصيل حول هذا نرى هنا.

أيضا كن حذرا كيف يمكنك بناء PL/SQL الجداول.إذا كان ذلك ممكنا ، تفضل بدلا من ذلك فعل كل ما تبذلونه من يحول مباشرة في SQL باستخدام "تضاف الى t1 حدد ..." كما تفعل الصف تلو الصف العمليات في PL/SQL سوف يكون لا يزال أبطأ من SQL.

في كلتا الحالتين يمكنك أيضا استخدام مباشرة-طريق إدراج باستخدام INSERT /*+APPEND*/, التي في الأساس يتجاوز DB ذاكرة التخزين المؤقت مباشرة يخصص ويكتب لبنات جديدة إلى ملفات البيانات.هذا يمكن أن يقلل أيضا من كمية من قطع الأشجار ، اعتمادا على كيفية استخدامه.هذه أيضا بعض الآثار ، لذا يرجى قراءة دليل على ما يرام أولا.

أخيرا, إذا كنت اقتطاع وإعادة بناء الجدول قد يكون من المفيد أن أول قطرة (أو علامة غير صالحة للاستعمال) وما بعدها إعادة إنشاء الفهارس.

نصائح أخرى

العادية إدراج البيانات أبطأ طريقة للحصول على البيانات في الجدول وليس المقصود الأكبر إدراج.المقالة التالية تشير الكثير من تقنيات مختلفة لتحسين الأداء: http://www.dba-oracle.com/oracle_tips_data_load.htm

إذا اسقاط مؤشر لا تسريع الامور بما فيه الكفاية ، تحتاج Oracle SQL*لودر:

http://www.oracle.com/technology/products/database/utilities/htdocs/sql_loader_overview.html

لنفترض أن كنت قد اتخذت العيد ، ايناميه ، سال العمل.حتى إنشاء الجدول الأول كما يلي:

SQL>create table tablename(eid number, ename varchar2(20),sal number,job char(10));

الآن إدراج البيانات:-

SQL>insert into tablename values(&eid,'&ename',&sal,'&job');

انخفاض مؤشر, ثم إدراج الصفوف ، ثم إعادة إنشاء الفهرس.

التحقق من هذا الارتباط http://www.dba-oracle.com/t_optimize_insert_sql_performance.htm

  1. النقاط الرئيسية للنظر في الخاص الحالة هو استخدام إلحاق تلميح مثل هذا مباشرة إلحاق في الجدول بدلا من استخدام freelist.إذا كنت تستطيع أن إيقاف تسجيل من استخدام إلحاق مع nologging تلميح أن تفعل ذلك
  2. استخدام إدراج مجمع بدلا بدلا من بالتكرار في PL/SQL
  3. استخدام sqlloaded تحميل البيانات مباشرة في الجدول إذا كنت يتم الحصول على البيانات من ملف تغذية

ربما واحدة من أفضل خيار لتجنب أوراكل أكبر قدر ممكن في الواقع.لقد كنت في حيرة من هذا بنفسي ، ولكن في كثير من الأحيان جافا العملية يمكن أن يتفوق على العديد من أوراكل المرافق التي إما استخدام OCI (قراءة:SQL Plus) أو سوف يستغرق الكثير من الوقت الخاص بك للحصول على حق (قراءة:SQL*محمل).

هذا لا يمنعك من استخدام تلميحات معينة إما (مثل /إلحاق/).

لقد كانت مفاجأة سارة في كل مرة لقد تحولت إلى نوع من الحل.

الهتافات ،

رولو

هنا هي بلدي التوصيات على سرعة إدراج.

الزناد - تعطيل أي مشغلات المرتبطة مع الجدول.تمكن بعد إدراج كامل.

- مؤشر انخفاض مؤشر إعادة إنشاء ذلك بعد إدراج كامل.

التي لا معنى لها احصائيات - إعادة تحليل الجدول مؤشر الإحصائيات.

مؤشر دي تجزئة - إعادة إنشاء الفهرس إذا لزم الأمر استخدام أي قطع الأشجار -إدراج باستخدام إدراج إلحاق (أوراكل فقط).هذا النهج هو مخاطرة كبيرة النهج لا يعيد يتم إنشاء سجلات ولذلك لا يمكنك التراجع - إجراء نسخة احتياطية من الجدول قبل البدء و لا تحاول على الجداول الحية.تحقق إذا كان لديك db مماثلة الخيار

موازية إدراج:بالتوازي مع إدراج الحصول على وظيفة بشكل أسرع.

استخدام إدراج مجمع القيود - ليس الكثير من النفقات العامة خلال إدراج ولكن لا تزال فكرة جيدة للتحقق إذا كان لا يزال بطيئا حتى بعد الخطوة 1

يمكنك معرفة المزيد على http://www.dbarepublic.com/2014/04/slow-insert.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top