سؤال

نريد أن نستخدم ctxsys.context اكتب الفهرس للبحث النص الكامل. لكنني فوجئت تماما، لا يتم تحديث مؤشر هذا النوع تلقائيا. لدينا 3 ملايين وثيقة مع حوالي 10K تحديثات / إدراج / حذف في اليوم الواحد.

ما هي توصياتك لمزامنة وتحسين مؤشر Oracle Text؟

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

المحلول

أعتقد أن "مزامنة كل" خيار، كما هو موضح في الإجابة السابقة متوفرة فقط في Oracle 10G أو أحدث. إذا كنت تستخدم الإصدار الأقدم من Oracle، فسيتعين عليك تشغيل عملية المزامنة بشكل دوري. على سبيل المثال، يمكنك إنشاء الإجراء المخزن التالي:

CREATE OR REPLACE 
Procedure sync_ctx_indexes
IS
 CURSOR sql1 is select distinct(pnd_index_owner||'.'||pnd_index_name) as index_name from ctx_pending;
BEGIN
 FOR rec1 IN sql1 LOOP
 ctx_ddl.sync_index(rec1.index_name);
 END LOOP;
END;

ثم قم بجدولة تشغيله عبر DBMS_JOB:

DBMS_JOB.SUBMIT(job_id, 'sync_ctx_indexes;', SYSDATE, 'SYSDATE + 1/720');

بالنسبة إلى تحسين الفهرس، يمكن استخدام الأمر التالي (يمكن أيضا جدولة أيضا باستخدام DBMS_JOB أو عبر Cron):

alter index my_index rebuild online parameters('optimize full maxtime 60');

هناك أيضا حزمة CTX_ * مع وظيفة مماثلة متوفرة.

نصائح أخرى

ماذا تقصد ب "غير محدثة تلقائيا"؟

يمكن مزامنة المؤشر على الالتزام أو بشكل دوري.

Create index ... on ... INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('SYNC ( ON COMMIT)')
Create index ... on ... INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS 'SYNC (EVERY "SYSDATE+1/24")')

لا أحتاج إلى دقة البحث في الوقت الفعلي، أوصت DBA بمزامنة المؤشر بشكل دوري، وقول كل 2 دقيقة. إذا كنت تستطيع أن تفعل ذلك بين عشية وضحاها، ثم أفضل. ما هو الأفضل على حملك وحجم المستند.

من المحتمل أن توفر لك هذه الروابط معلومات أكثر:

للحصول على نصيحة DBA، ربما ServerFault أفضل؟

وضع هذا هنا كتحديث لمستخدمي Oracle 12C. إذا كنت تستخدم الفهرس في وضع الوقت الحقيقي، فإنه يحتفظ بالعناصر في الذاكرة، ويدفع بشكل دائري إلى الجداول الرئيسية، مما يجعل التجزئة لأسفل ويمكن NRT البحث عن محتوى البث. إليك كيفية إعداده

exec ctx_ddl.drop_preference ( 'your_tablespace' );
exec ctx_ddl.create_preference( 'your_tablespace', 'BASIC_STORAGE' );
exec ctx_ddl.set_attribute ( 'your_tablespace', 'STAGE_ITAB', 'true' );
create index  some_text_idx on your_table(text_col)  indextype is ctxsys.context PARAMETERS ('storage your_tablespace sync (on commit)')

سيؤدي ذلك إلى إعداد الفهرس في وضع NRT. انها حلوة جدا.

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