как определить размер моей базы данных sql server?

<p>базовый: какой размер на диске моей бд ms sql server?<br> подробнее: можно ли быстро увидеть, где находятся данные? то есть какие таблицы, журналы и т. д.</p>

<p>возможно, вы захотите начать с команды sp\_spaceused.</p><p>например:</p><p><strong>sp\_spaceused</strong> <em> возвращает информацию об общем размере базы данных </em></p><p><strong>sp\_spaceused 'mytable'</strong> <em> возвращает информацию о размере mytable </em></p><p>прочитайте документы для всех вещей, о которых вы можете получить информацию. вы также можете использовать команду sp\_msforeachtable для запуска sp\_spaceused для всех таблиц одновременно.</p><p>правка: помните, что команда иногда возвращает несколько наборов данных, каждый набор содержит различный кусок статистики.</p>

<p>самый простой способ (без ввода!): в sql 2005/8 из management studio щелкните правой кнопкой мыши базу данных, выберите "отчеты", "стандартные отчеты", "использование диска" (также "по верхним таблицам, таблицам и разделам").</p>

<p>этот скрипт просматривает все таблицы в текущей базе данных и показывает, сколько места каждая из них занимает для данных, индексов и неиспользуемого пространства:</p><p> <a href="http://sqlserverpedia.com/wiki/calculate\_current\_table\_sizes">http://sqlserverpedia.com/wiki/calculate\_current\_table\_sizes</a> </p>

<p>вы можете увидеть физические файлы в <code>sys.database\_files</code>. здесь указан путь к файлу и его размер (в блоках iirc).</p><p><code>sp\_spaceused</code> покажет вам, сколько места занимает отдельный объект.</p>

<p>запустите это, чтобы получить размер таблицы:</p><pre><code>/****************************************************************************** ** file: “gettablespaceusage.sql” ** name: get table space useage for a specific schema ** auth: robert c. cain ** date: 01/27/2008 ** ** desc: calls the sp\_spaceused proc for each table in a schema and returns ** the table name, number of rows, and space used for each table. ** ** called by: ** n/a – as needed ** ** input parameters: ** in the code check the value of @schemaname, if you need it for a ** schema other than dbo be sure to change it. ** ** output parameters: ** na *******************************************************************************/ /*—————————————————————————*/ /* drop the temp table if it's there from a previous run */ /*—————————————————————————*/ if object\_id(n'tempdb..[#tablesizes]') is not null drop table #tablesizes ; go /*—————————————————————————*/ /* create the temp table */ /*—————————————————————————*/ create table #tablesizes ( [table name] nvarchar(128) /* name of the table */ , [number of rows] char(11) /* number of rows existing in the table. */ , [reserved space] varchar(18) /* reserved space for table. */ , [data space] varchar(18) /* amount of space used by data in table. */ , [index size] varchar(18) /* amount of space used by indexes in table. */ , [unused space] varchar(18) /* amount of space reserved but not used. */ ) ; go /*—————————————————————————*/ /* load the temp table */ /*—————————————————————————*/ declare @schemaname varchar(256) ; -- make sure to set next line to the schema name you want! set @schemaname = 'dbo' ; -- create a cursor to cycle through the names of each table in the schema declare curschematable cursor for select sys.schemas.name + '.' + sys.objects.name from sys.objects , sys.schemas where object\_id > 100 and sys.schemas.name = @schemaname /* for a specific table uncomment next line and supply name */ --and sys.objects.name = 'specific-table-name-here' and type\_desc = 'user\_table' and sys.objects.schema\_id = sys.schemas.schema\_id ; open curschematable ; declare @name varchar(256) ; /* this holds the name of the current table*/ -- now loop thru the cursor, calling the sp\_spaceused for each table fetch curschematable into @name ; while ( @@fetch\_status = 0 ) begin insert into #tablesizes exec sp\_spaceused @objname = @name ; fetch curschematable into @name ; end /* important to both close and deallocate! */ close curschematable ; deallocate curschematable ; /*—————————————————————————*/ /* feed the results back */ /*—————————————————————————*/ select [table name] , [number of rows] , [reserved space] , [data space] , [index size] , [unused space] from [#tablesizes] order by [table name] ; /*—————————————————————————*/ /* remove the temp table */ /*—————————————————————————*/ drop table #tablesizes ; </code></pre><p> <a href="http://arcanecode.com/2008/01/28/getting-table-space-usage-in-sql-server-2005/">взято</a> из <a href="http://arcanecode.com/">роберт кейн</a> блог</p><p>этот код для microsoft sql 2005+</p>

<p>это запрос/представление, которое получает всю эту информацию и даже больше, без каких-либо "злых" курсоров или циклов. ;-)</p><pre><code> /* vwtableinfo - table information view this view display space and storage information for every table in a sql server 2005 database. columns are: schema name owner may be different from schema) columns count of the max number of columns ever used) hasclusidx 1 if table has a clustered index, 0 otherwise rowcount indexkb space used by the table's indexes datakb space used by the table's data 16-march-2008, rbarryyoung@gmail.com 31-january-2009, edited for better formatting */ --create view vwtableinfo -- as select schema\_name(tbl.schema\_id) as [schema] , tbl.name , coalesce((select pr.name from sys.database\_principals pr where pr.principal\_id = tbl.principal\_id) , schema\_name(tbl.schema\_id)) as [owner] , tbl.max\_column\_id\_used as [columns] , cast(case idx.index\_id when 1 then 1 else 0 end as bit) as [hasclusidx] , coalesce( (select sum (spart.rows) from sys.partitions spart where spart.object\_id = tbl.object\_id and spart.index\_id < 2), 0) as [rowcount] , coalesce( (select cast(v.low/1024.0 as float) * sum(a.used\_pages - case when a.type <> 1 then a.used\_pages when p.index\_id < 2 then a.data\_pages else 0 end) from sys.indexes as i join sys.partitions as p on p.object\_id = i.object\_id and p.index\_id = i.index\_id join sys.allocation\_units as a on a.container\_id = p.partition\_id where i.object\_id = tbl.object\_id ) , 0.0) as [indexkb] , coalesce( (select cast(v.low/1024.0 as float) * sum(case when a.type <> 1 then a.used\_pages when p.index\_id < 2 then a.data\_pages else 0 end) from sys.indexes as i join sys.partitions as p on p.object\_id = i.object\_id and p.index\_id = i.index\_id join sys.allocation\_units as a on a.container\_id = p.partition\_id where i.object\_id = tbl.object\_id) , 0.0) as [datakb] , tbl.create\_date, tbl.modify\_date from sys.tables as tbl inner join sys.indexes as idx on (idx.object\_id = tbl.object\_id and idx.index\_id < 2) inner join master.dbo.spt\_values v on (v.number=1 and v.type='e') </code></pre><p>наслаждаться.</p>

<p>запустите пуск\программы\microsoft sql server\enterprise manager. откройте лист базы данных, в свойстве% databasename% вы можете увидеть местоположение data filrs & transaction files.</p>