এসকিউএল সার্ভার ডাটাবেস আকার নির্বাচন করুন


158

কেবলমাত্র ডাটাবেসের আকার পেতে আমি কীভাবে আমার এসকিএল সার্ভারটি জিজ্ঞাসা করতে পারি?

আমি এটি ব্যবহার করেছি:

use "MY_DB"
exec sp_spaceused

আমি এটা বুজেছি :

database_name   database_size   unallocated space
My_DB           17899.13 MB 5309.39 MB

এটি আমাকে বেশ কয়েকটি কলাম রিটার্ন দেয় যা আমার দরকার নেই, সম্ভবত এই সঞ্চিত পদ্ধতি থেকে ডাটাবেস_সাইজ কলাম নির্বাচন করার কৌশল আছে?

আমি এই কোডটি চেষ্টা করেছিলাম:

SELECT DB_NAME(database_id) AS DatabaseName,
       Name AS Logical_Name,
       Physical_Name,
       (size * 8) / 1024 SizeMB
FROM sys.master_files
WHERE DB_NAME(database_id) = 'MY_DB'

এটি আমাকে এই ফলাফল দেয়:

DatabaseName    Logical_Name    Physical_Name                    SizeMB
MY_DB           MY_DB           D:\MSSQL\Data\MY_DB.mdf          10613
MY_DB           MY_DB_log       D:\MSSQL\Data\MY_DB.ldf          7286

সুতরাং আমি এটি লিখেছি:

SELECT SUM(SizeMB)
FROM (
    SELECT DB_NAME(database_id) AS DatabaseName,
           Name AS Logical_Name,
           Physical_Name,
           (size * 8) / 1024 SizeMB
    FROM sys.master_files
    WHERE DB_NAME(database_id) = 'MY_DB'
) AS TEMP

আমি পেয়েছি: 1183

সুতরাং এটি কাজ করে তবে সম্ভবত এটি পাওয়ার কোনও সঠিক উপায় আছে?


2
একই ফলাফলটি এই 'নির্বাচন সুম ((আকার * 8) / 1024) এর সাইজ.মাস্টার_ফায়ারগুলি থেকে যেখানে DB_NAME (ডাটাবেস_আইডি) =' আপনার_ডিবি ''
অসুস্থ থাকুন

@ লিটলববিট্যাবলস কীভাবে আমি কলামে এমবি যুক্ত করতে পারি? আমি মানটির পরে "এমবি" চাই
অ্যাডিল এএসআইএফ

উত্তর:


228

আর একবার চেষ্টা কর -

প্রশ্ন:

SELECT 
      database_name = DB_NAME(database_id)
    , log_size_mb = CAST(SUM(CASE WHEN type_desc = 'LOG' THEN size END) * 8. / 1024 AS DECIMAL(8,2))
    , row_size_mb = CAST(SUM(CASE WHEN type_desc = 'ROWS' THEN size END) * 8. / 1024 AS DECIMAL(8,2))
    , total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2))
FROM sys.master_files WITH(NOWAIT)
WHERE database_id = DB_ID() -- for current db 
GROUP BY database_id

আউটপুট:

-- my query
name           log_size_mb  row_size_mb   total_size_mb
-------------- ------------ ------------- -------------
xxxxxxxxxxx    512.00       302.81        814.81

-- sp_spaceused
database_name    database_size      unallocated space
---------------- ------------------ ------------------
xxxxxxxxxxx      814.81 MB          13.04 MB

ফাংশন:

ALTER FUNCTION [dbo].[GetDBSize] 
(
    @db_name NVARCHAR(100)
)
RETURNS TABLE
AS
RETURN

  SELECT 
        database_name = DB_NAME(database_id)
      , log_size_mb = CAST(SUM(CASE WHEN type_desc = 'LOG' THEN size END) * 8. / 1024 AS DECIMAL(8,2))
      , row_size_mb = CAST(SUM(CASE WHEN type_desc = 'ROWS' THEN size END) * 8. / 1024 AS DECIMAL(8,2))
      , total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2))
  FROM sys.master_files WITH(NOWAIT)
  WHERE database_id = DB_ID(@db_name)
      OR @db_name IS NULL
  GROUP BY database_id

আপডেট 2016/01/22:

আকার, মুক্ত স্থান, শেষ ডাটাবেস ব্যাকআপ সম্পর্কে তথ্য প্রদর্শন করুন

IF OBJECT_ID('tempdb.dbo.#space') IS NOT NULL
    DROP TABLE #space

CREATE TABLE #space (
      database_id INT PRIMARY KEY
    , data_used_size DECIMAL(18,2)
    , log_used_size DECIMAL(18,2)
)

DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL = STUFF((
    SELECT '
    USE [' + d.name + ']
    INSERT INTO #space (database_id, data_used_size, log_used_size)
    SELECT
          DB_ID()
        , SUM(CASE WHEN [type] = 0 THEN space_used END)
        , SUM(CASE WHEN [type] = 1 THEN space_used END)
    FROM (
        SELECT s.[type], space_used = SUM(FILEPROPERTY(s.name, ''SpaceUsed'') * 8. / 1024)
        FROM sys.database_files s
        GROUP BY s.[type]
    ) t;'
    FROM sys.databases d
    WHERE d.[state] = 0
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')

EXEC sys.sp_executesql @SQL

SELECT
      d.database_id
    , d.name
    , d.state_desc
    , d.recovery_model_desc
    , t.total_size
    , t.data_size
    , s.data_used_size
    , t.log_size
    , s.log_used_size
    , bu.full_last_date
    , bu.full_size
    , bu.log_last_date
    , bu.log_size
FROM (
    SELECT
          database_id
        , log_size = CAST(SUM(CASE WHEN [type] = 1 THEN size END) * 8. / 1024 AS DECIMAL(18,2))
        , data_size = CAST(SUM(CASE WHEN [type] = 0 THEN size END) * 8. / 1024 AS DECIMAL(18,2))
        , total_size = CAST(SUM(size) * 8. / 1024 AS DECIMAL(18,2))
    FROM sys.master_files
    GROUP BY database_id
) t
JOIN sys.databases d ON d.database_id = t.database_id
LEFT JOIN #space s ON d.database_id = s.database_id
LEFT JOIN (
    SELECT
          database_name
        , full_last_date = MAX(CASE WHEN [type] = 'D' THEN backup_finish_date END)
        , full_size = MAX(CASE WHEN [type] = 'D' THEN backup_size END)
        , log_last_date = MAX(CASE WHEN [type] = 'L' THEN backup_finish_date END)
        , log_size = MAX(CASE WHEN [type] = 'L' THEN backup_size END)
    FROM (
        SELECT
              s.database_name
            , s.[type]
            , s.backup_finish_date
            , backup_size =
                        CAST(CASE WHEN s.backup_size = s.compressed_backup_size
                                    THEN s.backup_size
                                    ELSE s.compressed_backup_size
                        END / 1048576.0 AS DECIMAL(18,2))
            , RowNum = ROW_NUMBER() OVER (PARTITION BY s.database_name, s.[type] ORDER BY s.backup_finish_date DESC)
        FROM msdb.dbo.backupset s
        WHERE s.[type] IN ('D', 'L')
    ) f
    WHERE f.RowNum = 1
    GROUP BY f.database_name
) bu ON d.name = bu.database_name
ORDER BY t.total_size DESC

আউটপুট:

database_id name                             state_desc   recovery_model_desc total_size   data_size   data_used_size  log_size    log_used_size  full_last_date          full_size    log_last_date           log_size
----------- -------------------------------- ------------ ------------------- ------------ ----------- --------------- ----------- -------------- ----------------------- ------------ ----------------------- ---------
24          StackOverflow                    ONLINE       SIMPLE              66339.88     65840.00    65102.06        499.88      5.05           NULL                    NULL         NULL                    NULL
11          AdventureWorks2012               ONLINE       SIMPLE              16404.13     15213.00    192.69          1191.13     15.55          2015-11-10 10:51:02.000 44.59        NULL                    NULL
10          locateme                         ONLINE       SIMPLE              1050.13      591.00      2.94            459.13      6.91           2015-11-06 15:08:34.000 17.25        NULL                    NULL
8           CL_Documents                     ONLINE       FULL                793.13       334.00      333.69          459.13      12.95          2015-11-06 15:08:31.000 309.22       2015-11-06 13:15:39.000 0.01
1           master                           ONLINE       SIMPLE              554.00       492.06      4.31            61.94       5.20           2015-11-06 15:08:12.000 0.65         NULL                    NULL
9           Refactoring                      ONLINE       SIMPLE              494.32       366.44      308.88          127.88      34.96          2016-01-05 18:59:10.000 37.53        NULL                    NULL
3           model                            ONLINE       SIMPLE              349.06       4.06        2.56            345.00      0.97           2015-11-06 15:08:12.000 0.45         NULL                    NULL
13          sql-format.com                   ONLINE       SIMPLE              216.81       181.38      149.00          35.44       3.06           2015-11-06 15:08:39.000 23.64        NULL                    NULL
23          users                            ONLINE       FULL                173.25       73.25       3.25            100.00      5.66           2015-11-23 13:15:45.000 0.72         NULL                    NULL
4           msdb                             ONLINE       SIMPLE              46.44        20.25       19.31           26.19       4.09           2015-11-06 15:08:12.000 2.96         NULL                    NULL
21          SSISDB                           ONLINE       FULL                45.06        40.00       4.06            5.06        4.84           2014-05-14 18:27:11.000 3.08         NULL                    NULL
27          tSQLt                            ONLINE       SIMPLE              9.00         5.00        3.06            4.00        0.75           NULL                    NULL         NULL                    NULL
2           tempdb                           ONLINE       SIMPLE              8.50         8.00        4.50            0.50        1.78           NULL                    NULL         NULL                    NULL

6
যে ব্যবহারকারীটি ক্যোয়ারি চালাচ্ছেন তাদের অবশ্যই কমপক্ষে সিসাদমিন এসকিউএল সার্ভারের ভূমিকা থাকতে হবে, অন্যথায় NULL ফিরিয়ে দেওয়া হবে।
উয়ে কেইম

2
আমার কাছে কিছু ভিএলডিবি রয়েছে যা ডাইসিমাল (8,2) ইয়েলডের জন্য সৃষ্টি করে "গাণিতিক ওভারফ্লো ত্রুটি সংখ্যাকে ডেটা টাইপের সংখ্যায় রূপান্তর করে" " ডিসিমাল (8,2) ডেসিমাল (12,2) এ পরিবর্তন করা ঠিক হয়েছিল।
কলবিবারন

1
দুর্দান্ত একটি, কলামের নামে ইউনিটগুলিও কার্যকর হবে।
রড

91

নিম্নলিখিত কোয়েরির ফলাফলের সাথে ফলাফলগুলিও তুলনা করুন

EXEC sp_helpdb @dbname= 'MSDB'

এটি নিম্নলিখিত অনুরূপ ফলাফল উত্পাদন করে

এখানে চিত্র বর্ণনা লিখুন

একটি ভাল নিবন্ধ আছে - এসকিউএল সার্ভার ডাটাবেস এবং ডাটাবেস ফাইলের জন্য বিনামূল্যে স্থান নির্ধারণের বিভিন্ন উপায়


1
সমস্ত ডাটাবেসের জন্য লগের আকারটি পাওয়া যাবেDBCC SQLPERF(logspace)
LCJ

56

নিরূপণ করা আমার জন্য পুরোপুরি কাজ SQL ডাটাবেস আকার মধ্যে SQL সার্ভার 2012

exec sp_spaceused

এখানে চিত্র বর্ণনা লিখুন


3
এটি অ্যাজুরে এসকিউএল ভি 12 এর জন্যও কাজ করে (সম্ভবত ভি 10 কাজ করে তবে পরীক্ষিত নয়)। এমএস এসকিউএল সার্ভারের একটি নতুন সংস্করণ সহ এটি ব্যবহার করার জন্য পছন্দসই পদ্ধতি হওয়া উচিত। +1
গিলহ

ঠিক আছে! আমি আজুর ভিএক্স-তেও পরীক্ষা করিনি, আশা করি এটি অ্যাজুরেতে কাজ করে।
অঞ্জন কান্ত

4
SELECT      sys.databases.name AS [Database Name],  
        CONVERT(VARCHAR,SUM(size)*8/1024)+' MB' AS [Size]  
     FROM        sys.databases   
     JOIN        sys.master_files  
     ON          sys.databases.database_id=sys.master_files.database_id  
     GROUP BY    sys.databases.name  
     ORDER BY    sys.databases.name  

3

EXEC sp_spaceused @oneresultset = 1 ফলাফলের 1 টি সারিতে প্রদর্শন করুন

যদি আপনি কেবল 'এক্সইসি স্পি স্পেসিউসড' কার্যকর করেন তবে আপনি দুটি সারি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে দেখবেন v17.9


2
আপনার কোডটিতে কিছু ব্যাখ্যা যুক্ত করুন, যেমন অন্যরা এটি শিখতে পারে
নিকো হাজেস

3

এই অনুসন্ধানটি এই লিঙ্কটি অনুসরণ করে কীভাবে কাজ করে তা আপনি পরীক্ষা করতে পারেন ।

    IF OBJECT_ID('tempdb..#spacetable') IS NOT NULL 
    DROP TABLE tempdb..#spacetable 
    create table #spacetable
    (
    database_name varchar(50) ,
    total_size_data int,
    space_util_data int,
    space_data_left int,
    percent_fill_data float,
    total_size_data_log int,
    space_util_log int,
    space_log_left int,
    percent_fill_log char(50),
    [total db size] int,
    [total size used] int,
    [total size left] int
    )
    insert into  #spacetable
    EXECUTE master.sys.sp_MSforeachdb 'USE [?];
    select x.[DATABASE NAME],x.[total size data],x.[space util],x.[total size data]-x.[space util] [space left data],
    x.[percent fill],y.[total size log],y.[space util],
    y.[total size log]-y.[space util] [space left log],y.[percent fill],
    y.[total size log]+x.[total size data] ''total db size''
    ,x.[space util]+y.[space util] ''total size used'',
    (y.[total size log]+x.[total size data])-(y.[space util]+x.[space util]) ''total size left''
     from (select DB_NAME() ''DATABASE NAME'',
    sum(size*8/1024) ''total size data'',sum(FILEPROPERTY(name,''SpaceUsed'')*8/1024) ''space util''
    ,case when sum(size*8/1024)=0 then ''divide by zero'' else
    substring(cast((sum(FILEPROPERTY(name,''SpaceUsed''))*1.0*100/sum(size)) as CHAR(50)),1,6) end ''percent fill''
    from sys.master_files where database_id=DB_ID(DB_NAME())  and  type=0
    group by type_desc  ) as x ,
    (select 
    sum(size*8/1024) ''total size log'',sum(FILEPROPERTY(name,''SpaceUsed'')*8/1024) ''space util''
    ,case when sum(size*8/1024)=0 then ''divide by zero'' else
    substring(cast((sum(FILEPROPERTY(name,''SpaceUsed''))*1.0*100/sum(size)) as CHAR(50)),1,6) end ''percent fill''
    from sys.master_files where database_id=DB_ID(DB_NAME())  and  type=1
    group by type_desc  )y'
    select * from #spacetable 
    order by database_name
    drop table #spacetable

0
SELECT
    DB_NAME (database_id) as [Database Name],
    name as [Database File Name],
    [Type] = CASE WHEN Type_Desc = 'ROWS' THEN 'Data File(s)'
            WHEN Type_Desc = 'LOG'  THEN 'Log File(s)'
            ELSE Type_Desc END,
    size*8/1024 as 'Size (MB)',
    physical_name as [Database_File_Location]
FROM sys.master_files
ORDER BY 1,3

আউটপুট

Database Name               Database File Name              Type                Size (MB)   Database_File_Location
--------------------------- ------------------------------- ------------------- ----------- ---------------------------------------------------------------
AdventureWorksDW2017        AdventureWorksDW2017            Data File(s)        136         E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW2017.mdf
AdventureWorksDW2017        AdventureWorksDW2017_log        Log File(s)         72          E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW2017_log.ldf
DBA_Admin                   DBA_Admin                       Data File(s)        8           E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\DBA_Admin.mdf
DBA_Admin                   DBA_Admin_log                   Log File(s)         8           E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\DBA_Admin_log.ldf
EventNotifications          EventNotifications              Data File(s)        8           E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\EventNotifications.mdf
EventNotifications          EventNotifications_log          Log File(s)         8           E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\EventNotifications_log.ldf
master                      master                          Data File(s)        4           E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\master.mdf
master                      mastlog                         Log File(s)         2           E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
model                       modeldev                        Data File(s)        8           E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\model.mdf
model                       modellog                        Log File(s)         8           E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\modellog.ldf
msdb                        MSDBData                        Data File(s)        19          E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\MSDBData.mdf
msdb                        MSDBLog                         Log File(s)         13          E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\MSDBLog.ldf
tempdb                      temp2                           Data File(s)        8           E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb_mssql_2.ndf
tempdb                      temp3                           Data File(s)        8           E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb_mssql_3.ndf
tempdb                      temp4                           Data File(s)        8           E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb_mssql_4.ndf
tempdb                      tempdev                         Data File(s)        8           E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb.mdf
tempdb                      templog                         Log File(s)         8           E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\templog.ldf

0

অ্যাজুরি এবং অন-প্রিফিসিস উভয়ের জন্য এসকিউএল সার্ভারে ডাটাবেস আকার পরীক্ষা করুন-

পদ্ধতি 1 - 'sys.database_files' সিস্টেম ভিউ ব্যবহার করে

SELECT
    DB_NAME() AS [database_name],
    CONCAT(CAST(SUM(
        CAST( (size * 8.0/1024) AS DECIMAL(15,2) )
    ) AS VARCHAR(20)),' MB') AS [database_size]
FROM sys.database_files;

এখানে চিত্র বর্ণনা লিখুন

পদ্ধতি 2 - 'sp_spaceused' সিস্টেম সঞ্চিত পদ্ধতি ব্যবহার করে

EXEC sp_spaceused ;

এখানে চিত্র বর্ণনা লিখুন


0

এখানে ইতিমধ্যে অনেক দুর্দান্ত উত্তর রয়েছে তবে এটি একটি স্ট্যান্ডার্ড রিপোর্ট ব্যবহার করে এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও (এসএসএমএস) এর সাথে এসকিউএল সার্ভার ডাটাবেস আকার পেতে একটি সহজ এবং দ্রুত উপায় উল্লেখযোগ্য ।

একটি প্রতিবেদন চালানোর জন্য আপনার প্রয়োজন:

  1. ডাটাবেসে ডান ক্লিক করুন
  2. রিপোর্ট> স্ট্যান্ডার্ড রিপোর্টস> ডিস্ক ব্যবহারে যান।

এটি একটি সুন্দর প্রতিবেদন মুদ্রণ করে:

এখানে চিত্র বর্ণনা লিখুন

যেখানে মোট স্পেস রিজার্ভড হ'ল এটি ডিস্কের ডাটাবেসের মোট আকার এবং এতে সমস্ত ডেটা ফাইলের আকার এবং সমস্ত লেনদেনের লগ ফাইলের আকার অন্তর্ভুক্ত।

টুপির অধীনে, এসএসএমএস মোট স্থান স্থান সংরক্ষিত মান পেতে dbo.sysfiles ভিউ বা sys.datedia_files ভিউ ( এমএসএসকিউএল সংস্করণের উপর নির্ভর করে) এবং এই কোয়েরির কিছু ধরণের ব্যবহার করে:

SELECT sum((convert(dec (19, 2),  
convert(bigint,SIZE))) * 8192 / 1048576.0) db_size_mb
FROM dbo.sysfiles;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.