আমাদের কি এসকিউএল কোয়েরি থাকতে পারে যা মূলত এসকিউএল সার্ভারে সারণী এবং সূচী আকারগুলি দেখতে সহায়তা করবে।
কীভাবে এসকিউএল সার্ভার সারণী / সূচকগুলির জন্য মেমরির ব্যবহার বজায় রাখে?
আমাদের কি এসকিউএল কোয়েরি থাকতে পারে যা মূলত এসকিউএল সার্ভারে সারণী এবং সূচী আকারগুলি দেখতে সহায়তা করবে।
কীভাবে এসকিউএল সার্ভার সারণী / সূচকগুলির জন্য মেমরির ব্যবহার বজায় রাখে?
উত্তর:
exec sp_spaceusedপরামিতি ছাড়া পুরো ডাটাবেসের জন্য সারসংক্ষেপ দেখায়। পূর্বাচ্যযোগ্য সমাধান প্রতি টেবিলের জন্য একটি ফলাফল সেট উত্পন্ন করে - যা আপনার যদি খুব বেশি টেবিল থাকে তবে এসএসএমএস হ্যান্ডেল করতে সক্ষম হতে পারে।
আমি একটি স্ক্রিপ্ট তৈরি করেছি যা এর মাধ্যমে টেবিল ইনফোগুলি সংগ্রহ করে sp_spaceusedএবং আকারের অনুসারে বাছাই করা একক রেকর্ড সেটে একটি সংক্ষিপ্তসার প্রদর্শন করে।
create table #t
(
name nvarchar(128),
rows varchar(50),
reserved varchar(50),
data varchar(50),
index_size varchar(50),
unused varchar(50)
)
declare @id nvarchar(128)
declare c cursor for
select '[' + sc.name + '].[' + s.name + ']' FROM sysobjects s INNER JOIN sys.schemas sc ON s.uid = sc.schema_id where s.xtype='U'
open c
fetch c into @id
while @@fetch_status = 0 begin
insert into #t
exec sp_spaceused @id
fetch c into @id
end
close c
deallocate c
select * from #t
order by convert(int, substring(data, 1, len(data)-3)) desc
drop table #t
#।
sp_spaceused আপনাকে সম্মিলিত সমস্ত সূচকের আকার দেয়।
আপনি যদি কোনও টেবিলের জন্য প্রতিটি সূচকের আকার চান তবে এই দুটি প্রশ্নের একটি ব্যবহার করুন:
SELECT
i.name AS IndexName,
SUM(s.used_page_count) * 8 AS IndexSizeKB
FROM sys.dm_db_partition_stats AS s
JOIN sys.indexes AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
WHERE s.[object_id] = object_id('dbo.TableName')
GROUP BY i.name
ORDER BY i.name
SELECT
i.name AS IndexName,
SUM(page_count * 8) AS IndexSizeKB
FROM sys.dm_db_index_physical_stats(
db_id(), object_id('dbo.TableName'), NULL, NULL, 'DETAILED') AS s
JOIN sys.indexes AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
GROUP BY i.name
ORDER BY i.name
ফলাফলগুলি সাধারণত কিছুটা আলাদা তবে 1% এর মধ্যে থাকে।
Msg 102, Level 15, State 1, Line 5 - Incorrect syntax near '('.আমার দিকে ছুড়ে ফেলে , তবে সিনট্যাক্স নিয়ে কোনও সমস্যা দেখতে পাচ্ছি না। কোন ধারণা?
এসকিউএল ২০১২-এ টেবিল স্তরে এই তথ্য পাওয়া সুস্বাদুভাবে সহজ হয়ে উঠেছে:
এসকিউএল ম্যানেজমেন্ট স্টুডিও -> ডিবিতে ডান ক্লিক করুন -> প্রতিবেদনগুলি -> স্ট্যান্ডার্ড রিপোর্ট -> টেবিলের সাহায্যে ডিস্ক ব্যবহার!
উপভোগ করুন
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"
{ }করুন এবং এডিটর টুলবারের "কোড স্যাম্পল" বোতামটিতে ক্লিক করুন ( সুন্দরভাবে ফর্ম্যাট করুন এবং সিনট্যাক্সটি হাইলাইট করুন!
এখানে সর্বাধিক সফল উত্তরের আরও কমপ্যাক্ট সংস্করণ:
create table #tbl(
name nvarchar(128),
rows varchar(50),
reserved varchar(50),
data varchar(50),
index_size varchar(50),
unused varchar(50)
)
exec sp_msforeachtable 'insert into #tbl exec sp_spaceused [?]'
select * from #tbl
order by convert(int, substring(data, 1, len(data)-3)) desc
drop table #tbl
--Gets the size of each index for the specified table
DECLARE @TableName sysname = N'SomeTable';
SELECT i.name AS IndexName
,8 * SUM(s.used_page_count) AS IndexSizeKB
FROM sys.indexes AS i
INNER JOIN sys.dm_db_partition_stats AS s
ON i.[object_id] = s.[object_id] AND i.index_id = s.index_id
WHERE s.[object_id] = OBJECT_ID(@TableName, N'U')
GROUP BY i.name
ORDER BY i.name;
SELECT i.name AS IndexName
,8 * SUM(a.used_pages) AS IndexSizeKB
FROM sys.indexes AS i
INNER JOIN sys.partitions AS p
ON i.[object_id] = p.[object_id] AND i.index_id = p.index_id
INNER JOIN sys.allocation_units AS a
ON p.partition_id = a.container_id
WHERE i.[object_id] = OBJECT_ID(@TableName, N'U')
GROUP BY i.name
ORDER BY i.name;
এই পোস্টটির জন্য তৈরি হওয়ার পরে এটি অনেক দিন হয়ে গেছে তবে আমি আমার স্ক্রিপ্টটি ভাগ করতে চেয়েছিলাম:
WITH CteIndex
AS
(
SELECT
reservedpages = (reserved_page_count)
,usedpages = (used_page_count)
,pages = (
CASE
WHEN (s.index_id < 2) THEN (in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count)
ELSE lob_used_page_count + row_overflow_used_page_count
END
)
,s.object_id
,i.index_id
,i.type_desc AS IndexType
,i.name AS indexname
FROM sys.dm_db_partition_stats s
INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
)
SELECT DISTINCT
DB_NAME(DB_ID()) AS DatabaseName
,o.name AS TableName
,o.object_id
,ct.indexname
,ct.IndexType
,ct.index_id
, IndexSpace = LTRIM (STR ((CASE WHEN usedpages > pages THEN CASE WHEN ct.index_id < 2 THEN pages ELSE (usedpages - pages) END ELSE 0 END) * 8, 15, 0) + ' KB')
FROM CteIndex ct
INNER JOIN sys.objects o ON o.object_id = ct.object_id
INNER JOIN sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL , NULL) ps ON ps.object_id = o.object_id
AND ps.index_id = ct.index_id
ORDER BY name ASC
এটি এর জন্য কাজ করে:
এখানে একটি বর্ধিত সঞ্চিত প্রক্রিয়া রয়েছে sp_spaceusedযা এই তথ্যটি প্রকাশ করে। এটি ডেটা অভিধান থেকে এটি করতে মোটামুটি সংশ্লেষিত, তবে এই লিঙ্কটি এটির কোনও স্ক্রিপ্টের কাছে ভক্ত। এই স্ট্যাকওভারফ্লো প্রশ্নের অন্তর্নিহিত ডেটা স্ট্রাকচার সম্পর্কিত তথ্যের কিছু ফ্যান-আউট রয়েছে যা আপনি ক্যাপাসিটি পরিকল্পনার জন্য সারণী এবং সূচি আকারের অনুমানগুলি তৈরি করতে ব্যবহার করতে পারেন।
এই ক্যোয়ারী অন্য দুটি উত্তর থেকে আসে:
ডাটাবেসে সমস্ত টেবিলের আকার পান
কীভাবে একটি এসকিউএল সার্ভার ডাটাবেসে বৃহত্তম অবজেক্টগুলি সন্ধান করবেন?
, তবে আমি এটি সর্বজনীন হতে উন্নত করেছি। এটি sys.objectsঅভিধান ব্যবহার করে :
SELECT
s.NAME as SCHEMA_NAME,
t.NAME AS OBJ_NAME,
t.type_desc as OBJ_TYPE,
i.name as indexName,
sum(p.rows) as RowCounts,
sum(a.total_pages) as TotalPages,
sum(a.used_pages) as UsedPages,
sum(a.data_pages) as DataPages,
(sum(a.total_pages) * 8) / 1024 as TotalSpaceMB,
(sum(a.used_pages) * 8) / 1024 as UsedSpaceMB,
(sum(a.data_pages) * 8) / 1024 as DataSpaceMB
FROM
sys.objects t
INNER JOIN
sys.schemas s ON t.SCHEMA_ID = s.SCHEMA_ID
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.NAME NOT LIKE 'dt%' AND
i.OBJECT_ID > 255 AND
i.index_id <= 1
GROUP BY
s.NAME, t.NAME, t.type_desc, i.object_id, i.index_id, i.name
ORDER BY
sum(a.total_pages) DESC
;
sp_helpdbদরকারী