क्या कोई भी खंडित अनुक्रमणिका को पुनर्निर्माण और पुन: अनुक्रमणित करने के लिए स्क्रिप्ट प्रदान कर सकता है जब 'avg_fragmentation_in_percent' कुछ सीमाओं से अधिक हो जाता है (बेहतर कर्सर का उपयोग नहीं किया जाता है)?खंडित सूचकांक के पुनर्निर्माण और reindexing के लिए स्क्रिप्ट?
उत्तर
उपयोग के पुनर्निर्माण के लिए:
ALTER INDEX __NAME_OF_INDEX__ ON __NAME_OF_TABLE__ REBUILD
या उपयोग पुनर्निर्माण करने के लिए:
ALTER INDEX __NAME_OF_INDEX__ ON __NAME_OF_TABLE__ REORGANIZE
का पुनर्गठन कम (< 30%) fragmentations पर इस्तेमाल किया जाना चाहिए, लेकिन केवल पुनर्निर्माण (जो डेटाबेस के लिए भारी है) विखंडन को 0% तक घटा देता है।
अधिक जानकारी के लिए देख https://msdn.microsoft.com/en-us/library/ms189858.aspx
मैं पाया है निम्न स्क्रिप्ट अनुक्रमित बनाए रखने में बहुत अच्छा है, तो आप इस रात को चलाने के लिए निर्धारित समय सीमा या कोई अन्य आप चाहें तो कर सकते हैं।
यहाँ संशोधित स्क्रिप्ट जो मैं http://www.foliotek.com/devblog/sql-server-optimization-with-index-rebuilding जो मैं यहाँ पोस्ट करने के लिए उपयोगी पाया से ले लिया है। यह हालांकि एक कर्सर का उपयोग करता है और मुझे पता है क्या कर्सर यह आसानी से एक कर्सर कम संस्करण के लिए परिवर्तित किया जा सकता है के साथ मुख्य समस्या है।
यह अच्छी तरह से प्रलेखित है और आप आसानी से इसे पढ़ सकते हैं और अपनी आवश्यकताओं को संशोधित कर सकते हैं।
IF OBJECT_ID('tempdb..#work_to_do') IS NOT NULL
DROP TABLE tempdb..#work_to_do
BEGIN TRY
--BEGIN TRAN
use yourdbname
-- Ensure a USE statement has been executed first.
SET NOCOUNT ON;
DECLARE @objectid INT;
DECLARE @indexid INT;
DECLARE @partitioncount BIGINT;
DECLARE @schemaname NVARCHAR(130);
DECLARE @objectname NVARCHAR(130);
DECLARE @indexname NVARCHAR(130);
DECLARE @partitionnum BIGINT;
DECLARE @partitions BIGINT;
DECLARE @frag FLOAT;
DECLARE @pagecount INT;
DECLARE @command NVARCHAR(4000);
DECLARE @page_count_minimum SMALLINT
SET @page_count_minimum = 50
DECLARE @fragmentation_minimum FLOAT
SET @fragmentation_minimum = 30.0
-- Conditionally select tables and indexes from the sys.dm_db_index_physical_stats function
-- and convert object and index IDs to names.
SELECT object_id AS objectid ,
index_id AS indexid ,
partition_number AS partitionnum ,
avg_fragmentation_in_percent AS frag ,
page_count AS page_count
INTO #work_to_do
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL,
'LIMITED')
WHERE avg_fragmentation_in_percent > @fragmentation_minimum
AND index_id > 0
AND page_count > @page_count_minimum;
IF CURSOR_STATUS('global', 'partitions') >= -1
BEGIN
PRINT 'partitions CURSOR DELETED' ;
CLOSE partitions
DEALLOCATE partitions
END
-- Declare the cursor for the list of partitions to be processed.
DECLARE partitions CURSOR LOCAL
FOR
SELECT *
FROM #work_to_do;
-- Open the cursor.
OPEN partitions;
-- Loop through the partitions.
WHILE (1 = 1)
BEGIN;
FETCH NEXT
FROM partitions
INTO @objectid, @indexid, @partitionnum, @frag, @pagecount;
IF @@FETCH_STATUS < 0
BREAK;
SELECT @objectname = QUOTENAME(o.name) ,
@schemaname = QUOTENAME(s.name)
FROM sys.objects AS o
JOIN sys.schemas AS s ON s.schema_id = o.schema_id
WHERE o.object_id = @objectid;
SELECT @indexname = QUOTENAME(name)
FROM sys.indexes
WHERE object_id = @objectid
AND index_id = @indexid;
SELECT @partitioncount = COUNT(*)
FROM sys.partitions
WHERE object_id = @objectid
AND index_id = @indexid;
SET @command = N'ALTER INDEX ' + @indexname + N' ON '
+ @schemaname + N'.' + @objectname + N' REBUILD';
IF @partitioncount > 1
SET @command = @command + N' PARTITION='
+ CAST(@partitionnum AS NVARCHAR(10));
EXEC (@command);
--print (@command); //uncomment for testing
PRINT N'Rebuilding index ' + @indexname + ' on table '
+ @objectname;
PRINT N' Fragmentation: ' + CAST(@frag AS VARCHAR(15));
PRINT N' Page Count: ' + CAST(@pagecount AS VARCHAR(15));
PRINT N' ';
END;
-- Close and deallocate the cursor.
CLOSE partitions;
DEALLOCATE partitions;
-- Drop the temporary table.
DROP TABLE #work_to_do;
--COMMIT TRAN
END TRY
BEGIN CATCH
--ROLLBACK TRAN
PRINT 'ERROR ENCOUNTERED:' + ERROR_MESSAGE()
END CATCH
दो समाधान: एक सरल और एक और अधिक उन्नत।
परिचय
इस प्रकार वहाँ दो आप के लिए उपलब्ध समाधान आपकी समस्या की गंभीरता
अपने खुद के मानों की जगह के आधार पर कर रहे हैं:
- के नाम के साथ
XXXMYINDEXXXX
बदलें एक अनुक्रमणिका। - तालिका के नाम से
XXXMYTABLEXXX
बदलें। - डेटाबेस के नाम से
XXXDATABASENAMEXXX
बदलें।
समाधान 1. अनुक्रमण
ऑफलाइन मोड में एक मेज के लिए सभी अनुक्रमित के पुनर्निर्माण
ALTER INDEX ALL ON XXXMYTABLEXXX REBUILD
ऑफलाइन मोड में एक मेज के लिए एक निर्दिष्ट सूचकांक पुनर्निर्माण
ALTER INDEX XXXMYINDEXXXX ON XXXMYTABLEXXX REBUILD
समाधान 2. खंडन
फ्रैगमेंटेशन उन तालिकाओं में एक मुद्दा है जो नियमित रूप से प्रविष्टियों को जोड़कर हटाए जाते हैं।
चेक विखंडन प्रतिशत
SELECT
ips.[index_id] ,
idx.[name] ,
ips.[avg_fragmentation_in_percent]
FROM
sys.dm_db_index_physical_stats(DB_ID(N'XXXMYDATABASEXXX'), OBJECT_ID(N'XXXMYTABLEXXX'), NULL, NULL, NULL) AS [ips]
INNER JOIN sys.indexes AS [idx] ON [ips].[object_id] = [idx].[object_id] AND [ips].[index_id] = [idx].[index_id]
विखंडन 5..30%
तो विखंडन मूल्य 5% से अधिक है, लेकिन कम से कम 30% तो यह अनुक्रमित का पुनर्गठन के लायक है।
एक मेज के लिए सभी अनुक्रमित पुनर्संगठित
ALTER INDEX ALL ON XXXMYTABLEXXX REORGANIZE
पुनर्निर्माण एक एक मेज
ALTER INDEX XXXMYINDEXXXX ON XXXMYTABLEXXX REORGANIZE
विखंडन 30% +
तो विखंडन मूल्य है 30% के लिए निर्दिष्ट सूचकांक या इससे अधिक तो यह ऑनलाइन मोड में इंडेक्स पुनर्निर्माण के लायक है।
एक मेज के लिए ऑनलाइन मोड में सभी अनुक्रमित के पुनर्निर्माण
ALTER INDEX ALL ON XXXMYTABLEXXX REBUILD WITH (ONLINE = ON)
एक मेज
ALTER INDEX XXXMYINDEXXXX ON XXXMYTABLEXXX REBUILD WITH (ONLINE = ON)
असली जवाब के लिए ऑनलाइन मोड में एक निर्दिष्ट सूचकांक के पुनर्निर्माण, 2016 और 2017 में, है: उपयोग ओला Hallengren की पटकथा:
https://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html
हम सब किसी भी, जानते हैं या से परेशान करने की जरूरत है हमारे आपसी विकास में इस बिंदु पर है कि।
- 1. खंडित MP4 "mdat" परमाणु से एमपी 4 फ़ाइल पुनर्निर्माण?
- 2. अपरिभाषित सूचकांक: PHP स्क्रिप्ट
- 3. कमान MongoDB संग्रह reindexing करने के लिए सभी MongoDB संग्रह
- 4. एसक्यूएल सर्वर: इंडेक्स पुनर्निर्माण और सूचकांक पुनर्गठन के बीच क्या अंतर है?
- 5. जावास्क्रिप्ट - एक सरणी reindexing
- 6. पुनर्निर्माण अनुक्रमित nonclustered अनुक्रमणिका
- 7. हमेशा के पुनर्निर्माण करना
- 8. नए माइग्रेशन शुरू करने और पुनर्निर्माण/पुनर्निर्माण के लिए रोलबैक कैसे करें
- 9. पुनर्निर्माण के लिए एंड्रॉइड फोर्स फ्रैगमेंट देखें
- 10. समूह के लिए MySQL सूचकांक
- 11. पुनर्निर्माण
- 12. बिखरे हुए खंडों के साथ खंडित कमी
- 13. खंडित नियंत्रण में चयनित सेगमेंट के लिए रंग अनुकूलित करें
- 14. कैसे मेरी डेटाबेस में हर तालिका के लिए सूचकांक को बदलने के लिए
- 15. कैसे VS2010 आईडीई Intellisense के पुनर्निर्माण के लिए?
- 16. सभी खंडित तालिकाओं के लिए MySQL ऑप्टिमाइज़ टेबल
- 17. लंबे समय से पुनर्निर्माण
- 18. ओपनजीएल - सूचकांक के लिए GL_ELEMENT_ARRAY_BUFFER क्यों है?
- 19. कैसे सूचकांक आर मैट्रिक्स के लिए यह
- 20. सूचकांक वाक्य के लिए सर्वश्रेष्ठ एल्गोरिदम
- 21. स्क्रिप्ट सारांशित करने के लिए स्क्रिप्ट
- 22. खंडित स्थानांतरण एन्कोडिंग
- 23. भौगोलिक निर्देशांक के लिए स्थानिक सूचकांक?
- 24. इंडेक्स-संगठित तालिका और सामान्य तालिका पर इंडेक्स के पुनर्निर्माण में क्या अंतर है?
- 25. आर में मैट्रिक्स के लिए सूचकांक मूल्य?
- 26. एसक्यूएल स्क्रिप्ट सम्मिलित स्क्रिप्ट बनाने के लिए
- 27. कैसे सूचकांक करने के लिए गणन
- 28. एंड्रॉइड - सूची दृश्य के लिए सूचकांक?
- 29. PHP स्क्रिप्ट चलाने के लिए बैश स्क्रिप्ट
- 30. asp.net - डीबगिंग और पुनर्निर्माण समाधान के दौरान सत्र बनाए रखें?
क्यों नहीं? कोई भी कोई प्रश्न पूछने का विकल्प चुन सकता है कि वे विकी प्रश्न पूछते हैं। यह प्रतिनिधि अंक खोने से बचाता है। –
@Savitha: कौन सा हिस्सा समस्या है? मुझे तुरंत यकीन नहीं है कि आप कर्सर के साथ ऑपरेशन कैसे करेंगे। क्या आप प्रतिशत का पता लगाने और फिर पुनर्निर्माण के लिए एक स्क्रिप्ट चाहते हैं? क्या आपने विकल्पों के लिए मैन्युअल की जांच की है? उपलब्ध बयान क्या हैं? क्या आपको इंडेक्स विवरण निर्धारित करना है? क्या कोई वैकल्पिक INDEX कथन है? –
@ जोनाथन लेफ्लर, लेकिन वोटों को कम करने के जोखिम के साथ यह एक अच्छा कानूनी सवाल है। कम लोग विकी देखते हैं और/या शून्य अंक के लिए जवाब देना चाहते हैं। –