加入收藏 | 设为首页 | 会员中心 | 我要投稿 好传媒网 (https://www.haochuanmei.com/)- 区块链、物联平台、物联安全、数据迁移、5G!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server中如何获取服务器信息

发布时间:2023-12-22 16:21:22 所属栏目:MsSql教程 来源:DaWei
导读: 这篇文章主要讲解了“SQL Server中怎样获取服务器信息,SQL语句是什么”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所
这篇文章主要讲解了“SQL Server中怎样获取服务器信息,SQL语句是什么”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。

在SQL SERVER中如何通过SQL语句获取服务器硬件和系统信息呢?下面介绍一下如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息。如有不足和遗漏,敬请补充。谢谢!

一:查看数据库服务器CPU的信息

---SQL 1:获取数据库服务器的CPU型号

EXEC xp_instance_regread 
  'HKEY_LOCAL_MACHINE',
  'HARDWARE\DESCRIPTION\System\CentralProcessor\0',
  'ProcessorNameString';
  
---SQL 2:获取数据库服务器CPU核数等信息(只适用于SQL 2005以及以上版本数据库)

/*************************************************************************************
--cpu_count        :指定系统中的逻辑 CPU 数
--hyperthread_ratio    :指定一个物理处理器包公开的逻辑内核数与物理内核数的比.虚拟机
--             中可以表示每个虚拟插槽的核数。虚拟中[Physical CPU Count]其实
--             表示虚拟插槽数
*************************************************************************************/
SELECT s.cpu_count            AS [Loggic CPU Count]
   ,s.hyperthread_ratio        AS [Hyperthread Ratio]
   ,s.cpu_count/s.hyperthread_ratio AS [Physical CPU Count] 
FROM sys.dm_os_sys_info s OPTION (RECOMPILE);

---SQL 3:获取数据库服务器CPU核数(适用于所有版本)

CREATE TABLE #TempTable
  (
   [Index] VARCHAR(2000) ,
   [Name] VARCHAR(2000) ,
   [Internal_Value] VARCHAR(2000) ,
   [Character_Value] VARCHAR(2000)
  );
INSERT INTO #TempTable
    EXEC xp_msver;
SELECT Internal_Value AS VirtualCPUCount
FROM  #TempTable
WHERE  Name = 'ProcessorCount';
DROP TABLE #TempTable;
GO

---SQL 4:在老外博客中看到一个计算CPU相关信息的SQL,不过虚拟机计算有点小问题,我修改了一下。

DECLARE @xp_msver TABLE (
  [idx] [int] NULL
  ,[c_name] [varchar](100) NULL
  ,[int_val] [float] NULL
  ,[c_val] [varchar](128) NULL
  )
INSERT INTO @xp_msver
EXEC ('[master]..[xp_msver]');;
WITH [ProcessorInfo]
AS (
  SELECT ([cpu_count] / [hyperthread_ratio]) AS [number_of_physical_cpus]
    ,CASE 
      WHEN hyperthread_ratio = cpu_count
        THEN cpu_count
      ELSE (([cpu_count] - [hyperthread_ratio]) / ([cpu_count] / [hyperthread_ratio]))
      END AS [number_of_cores_per_cpu]
    ,CASE 
      WHEN hyperthread_ratio = cpu_count
        THEN cpu_count
      ELSE ([cpu_count] / [hyperthread_ratio]) * (([cpu_count] - [hyperthread_ratio]) / ([cpu_count] / [hyperthread_ratio]))
      END AS [total_number_of_cores]
    ,[cpu_count] AS [number_of_virtual_cpus]
    ,(
      SELECT [c_val]
      FROM @xp_msver
      WHERE [c_name] = 'Platform'
      ) AS [cpu_category]
  FROM [sys].[dm_os_sys_info]
  )
SELECT [number_of_physical_cpus]
  ,[number_of_cores_per_cpu]
  ,[total_number_of_cores]
  ,[number_of_virtual_cpus]
  ,LTRIM(RIGHT([cpu_category], CHARINDEX('x', [cpu_category]) - 1)) AS [cpu_category]
FROM [ProcessorInfo]

---查看虚拟机CPU信息
DECLARE @xp_msver TABLE (
  [idx] [int] NULL
  ,[c_name] [varchar](100) NULL
  ,[int_val] [float] NULL
  ,[c_val] [varchar](128) NULL
  )
INSERT INTO @xp_msver
EXEC ('[master]..[xp_msver]');;
WITH [ProcessorInfo]
AS (
  SELECT ([cpu_count] / [hyperthread_ratio]) AS [number_of_physical_cpus]
    ,[hyperthread_ratio] AS [number_of_cores_per_cpu]
    ,[cpu_count] AS [total_number_of_cores]
    ,[cpu_count] AS [number_of_virtual_cpus]
    ,(
      SELECT [c_val]
      FROM @xp_msver
      WHERE [c_name] = 'Platform'
      ) AS [cpu_category]
  FROM [sys].[dm_os_sys_info]
  )
SELECT [number_of_physical_cpus]
  ,[number_of_cores_per_cpu]
  ,[total_number_of_cores]
  ,[number_of_virtual_cpus]
  ,LTRIM(RIGHT([cpu_category], CHARINDEX('x', [cpu_category]) - 1)) AS [cpu_category]
FROM [ProcessorInfo]

到此这篇关于“SQL Server中怎样获取服务器信息,SQL语句是什么”的文章就介绍到这了,欢迎关注,小编将为大家输出更多高质量的实用文章!
 

(编辑:好传媒网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章