我最终想使用 PowerShell 来替换我们用于 SQL 实例监视器的旧 KornShell 脚本。但是,我很难让我的大脑围绕 PowerShell 实际与 SQL Server 通信的所有不同方式。不确定这是否是全部,但我可以通过以下 5 种完全不同的方式查询 SQL 服务器的版本:
1. SQLConnection .NET 类
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=MyServer;Database=Master;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "Select @@version as SQLServerVersion"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
Run Code Online (Sandbox Code Playgroud)
2. WMI 提供程序
$sqlProperties = Get-WmiObject
-computerName "MyServer"
-namespace root\Microsoft\SqlServer\ComputerManagement10
-class SqlServiceAdvancedProperty
-filter "ServiceName = 'MSSQLSERVER'"
$sqlProperties.VERSION
Run Code Online (Sandbox Code Playgroud)
3. SMO
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
$smo-var = New-Object …Run Code Online (Sandbox Code Playgroud) 我喜欢在我的数据库中获取最新执行的语句以及性能指标。
因此,我想知道哪些 SQL 语句最占用 CPU/磁盘。
我想获得有关一段时间内连接峰值数量的统计信息。
我知道这种pg_stat_activity观点,就像select count(*) from pg_stat_activity,但我认为这种方法不是很聪明。
是否有其他视图或表格可以提供我需要的信息?
我在试图找出数据库中的一些性能问题时遇到了困难。我正在使用大量在线资源来了解要监控的内容以及如何解释该信息。
从上面的,我无法找到的之间有什么区别一个明确的解释pg_stat_database.tup_returned和pg_stat_database.tup_fetched。
在 pgAdmin4 中,有一个漂亮的图表叫做“Tuples out”,其中对比了这两个概念,但我不知道如何解释这些信息。在官方文档中只说:
tup_returned: 此数据库中查询返回的行数tup_fetched: 此数据库中查询获取的行数“获取”和“返回”究竟是什么意思?
我正在使用 postgresql 10。
SQL Server 允许您将作业配置为在失败时发送电子邮件警报。这是监控您的工作的一种简单而有效的方法。但是,这些警报不包括任何细节——只是成功或失败的通知。
如果作业失败,典型的警报电子邮件将如下所示:
JOB RUN: 'DBA - Consistency Check Databases' was run on 8/14/2011 at 12:00:04 AM
DURATION: 0 hours, 0 minutes, 0 seconds
STATUS: Failed
MESSAGES: The job failed. The Job was invoked by Schedule 2 (Nightly Before
Backup 12AM). The last step to run was step 1 (Check Databases).
Run Code Online (Sandbox Code Playgroud)
要确定失败的原因,您必须导航到 SQL Server Management Studio 中的实例,找到作业并查看其执行历史记录。在大型环境中,必须不断地这样做可能会很痛苦。
理想的警报电子邮件应预先包含失败原因,并让您直接着手解决方案。
我熟悉这个问题的解决方案。有没有人有任何经验?它的缺点是:
spDBA_job_notification有没有人想出更好的解决方案?
我正在编写一个大量使用 SQL Azure 的网站。然而,它是痛苦的缓慢。
有没有一种简单的方法来分析实时 SQL Azure 实例?
问题
我们的 mongodb 设置有一个奇怪的问题。有时我们会遇到高连接和高队列的峰值,如果我们让队列和连接增加,mongodb 进程就会停止响应。我们需要使用带有htop 的sigkill重新启动实例。
好像是系统限制/mongodb配置阻止mongodb运行,因为硬件资源没问题。此问题的版本发生在单机上,然后在生产服务器上设置副本。详情在前面。
关于软件环境
这是一个独立的 mongodb 实例(非分片或副本集),它在专用机器上运行,并由其他机器查询。我在 Debian 7.7 下使用 mongodb-linux-x86_64-2.6.12。
查询 mongo 的机器使用 Django==1.7.4、Mongoengine=0.10.1 和 pymongo==2.8、nginx 1.6.2 和 gunicorn 19.1.1。
在 Django settings.py 文件中,我使用以下几行连接到数据库:
from mongoengine import connect
connect(
MONGO_DB,
username = MONGO_USER,
password = MONGO_PWD,
host = MONGO_HOST,
port = MONGO_PORT
)
Run Code Online (Sandbox Code Playgroud)
彩信统计
正如您在 MMS 服务的以下 img 中看到的,我们在连接和队列上有峰值:

发生这种情况时,我们的 mongodb 进程完全冻结。我们必须使用SIGKILL来重启mongodb,这真的很糟糕。
图中有 3 个冻结事件。

正如 img 所示,当这种情况发生时,我们在非映射虚拟内存上也有一个峰值。

我们还发现 Btree 图表在第 2 次和第 3 次冻结前后有所增加。

我们检查了日志,但没有可疑的查询,而且 Opcounters 也没有暴涨,似乎没有比平时更多的查询。
在所有情况下,DB …
我在 Ubuntu 服务器上运行 Postgresql,需要能够监视其内存使用情况。目前,我有脚本在一分钟的 cron 作业中运行,用于监视/记录各种统计信息,并且还需要监视/记录 Postgresql 的当前内存使用情况。除了 Postgresql 很好地利用了共享内存,因此诸如“top”之类的程序给出的值不准确之外,我四处搜索并没有找到太多东西。
如何在任何给定时间监控 Postgresql 的总内存使用量?此数据稍后将用于创建用于分析的图表。
是否可以在 SQL Server 2008 中设置警报,以便在特定类别中的作业失败时发送电子邮件?
我想知道,因为我想在 SSRS 订阅失败时设置电子邮件 - 所有这些订阅都是Report Server类别中的作业。
编辑- 事实证明,当 SSRS 订阅失败时,作业本身不会失败,因此我的问题不适用于 SSRS 订阅监视使用。但是我仍然想知道我们在我们的环境中运行的其他作业
我尝试使用 Nagios 脚本来监视 Postgres 数据库上的数据库连接数,但我遇到了这个问题:这些连接数被视为当前打开的连接数,每 5 分钟测量一次。
SELECT sum(numbackends) FROM pg_stat_database;
Run Code Online (Sandbox Code Playgroud)
尽管如此,这似乎错过了大量的短期连接,因此统计数据与现实相去甚远。
我尝试手动运行脚本,我观察到即使在两个连接之间发生了很大的变化,彼此之间的距离也只有几秒钟。
我怎样才能以可靠的方式获得这些信息?像 max(connectios) 发生在一个时间间隔内。
monitoring ×10
postgresql ×4
sql-server ×3
performance ×2
linux ×1
memory ×1
mongodb ×1
oracle ×1
powershell ×1
profiler ×1
ssrs ×1
ubuntu ×1