zoukankan      html  css  js  c++  java
  • sql表内存占用情况,并进行缩放

    sql表内存占用情况

    IF OBJECT_ID('tempdb..#TablesSizes') IS NOT NULL
    
        DROP TABLE #TablesSizes
    
    CREATE TABLE #TablesSizes
    
        (
    
          TableName sysname ,
    
          Rows BIGINT ,
    
          reserved VARCHAR(100) ,
    
          data VARCHAR(100) ,
    
          index_size VARCHAR(100) ,
    
          unused VARCHAR(100)
    
        )
    
    DECLARE @sql VARCHAR(MAX)
    
    SELECT  @sql = COALESCE(@sql, '') + '
    
    INSERT INTO #TablesSizes execute sp_spaceused ''' + QUOTENAME(TABLE_SCHEMA,
    
                                                                  '[]') + '.'
    
            + QUOTENAME(Table_Name, '[]') + ''''
    
    FROM    INFORMATION_SCHEMA.TABLES
    
    WHERE   TABLE_TYPE = 'BASE TABLE'
    
    PRINT ( @SQL )
    
    EXECUTE (@SQL)
    
    SELECT  *
    
    FROM    #TablesSizes
    
    ORDER BY Rows DESC

    USE 你的库名;
    GO
    -- 数据库空间使用情况
    EXEC sp_spaceused;
    
    -- 查下文件空间使用情况
    SELECT 
    	file_id, name,
    	[文件大小(MB)] = size / 128.,
    	[未使用空间(MB)] = (size - FILEPROPERTY(name, N'SpaceUsed')) / 128.
    FROM sys.database_files
    
    -- 表空间使用情况
    DECLARE @tb_size TABLE(
    	name sysname,
    	rows int,
    	size varchar(100),
    	data_size varchar(100),
    	INDEX_size varchar(100),
    	unused_size varchar(100)
    );
    INSERT @tb_size
    EXEC sp_msforeachtable '
    sp_spaceused ''?''
    '
    SELECT * FROM @tb_size
    

      https://social.msdn.microsoft.com/Forums/azure/pt-br/388f92e1-9a1e-497d-bde1-6664561fd44e/sql2008-mdf259912021422826228233838239064?forum=sqlserverzhchs

    缩放方法2 :

    操作命令:

      现在我一个库ASFCORE的日志文件已经达到30G了,数据文件为1G,如果要收缩日志文件,则执行如下命令即可!

    •   查看数据库的recovery_model_desc类型

        SELECT NAME, recovery_model_desc FROM sys.databases

    •   如果是FULL类型,修改为SIMPLE类型  

        ALTER DATABASE ASFCORE SET Recovery simple

    •   收缩日志文件大小(单位是M)

        DBCC SHRINKFILE (N'ASFCORE_log' , 10)

    •   检查日志文件名称

        USE ASFCORE
        SELECT NAME, size FROM sys.database_files

    •   恢复成FULL类型

        ALTER DATABASE ASFCORE SET Recovery FULL

    转载于:https://www.cnblogs.com/blackcore/archive/2010/12/27/1917911.html

    执行文件清理

    use [dbName];
    
    go
    select * from sys.database_files
    
    --清理数据文件
    DBCC SHRINKFILE (1)
    --清理日志文件
    DBCC SHRINKFILE (2)
    
    Go
    

    完整sql

    USE[master]  
    GO  
    ALTER DATABASE 要清理的数据库名称 SET RECOVERY SIMPLE WITH NO_WAIT  
    GO  
    ALTER DATABASE 要清理的数据库名称 SET RECOVERY SIMPLE   --简单模式  
    GO  
    USE 要清理的数据库名称  
    GO  
    DBCC SHRINKFILE (N'要清理的数据库名称_log' , 2, TRUNCATEONLY)  --设置压缩后的日志大小为2M,可以自行指定  
    GO  
    USE[master]  
    GO  
    ALTER DATABASE 要清理的数据库名称 SET RECOVERY FULL WITH NO_WAIT  
    GO  
    ALTER DATABASE 要清理的数据库名称 SET RECOVERY FULL  --还原为完全模式  
    GO
    

      

      

  • 相关阅读:
    Hbase学习02-API操作
    Hbase学习01-shell操作
    09 | 普通索引和唯一索引,应该怎么选择?
    08 | 事务到底是隔离的还是不隔离的?
    07 | 行锁功过:怎么减少行锁对性能的影响?
    06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
    05 | 深入浅出索引(下)
    04 | 深入浅出索引(上)
    03 | 事务隔离:为什么你改了我还看不见?
    02 | 日志系统:一条SQL更新语句是如何执行的?
  • 原文地址:https://www.cnblogs.com/lhlong/p/11114514.html
Copyright © 2011-2022 走看看