我有一个简单的SQL查询,当从C#运行时需要超过30秒,然后每次超时,而在SQL Server Management Studio上运行时立即成功完成.在后一种情况下,查询执行计划不会显示任何麻烦,并且通过一些简单的操作可以很好地传播执行时间.
我EXEC sp_who2在查询从C#运行时运行' ',它被列为占用29,000毫秒的CPU时间,并且没有被任何东西阻止.
我不知道如何开始解决这个问题.有没有人有一些见解?
查询是:
SELECT
c.lngId,
...
FROM tblCase c
INNER JOIN tblCaseStatus s ON s.lngId = c.lngId
INNER JOIN tblCaseStatusType t ON t.lngId = s.lngId
INNER JOIN [Another Database]..tblCompany cm ON cm.lngId = cs.lngCompanyId
WHERE t.lngId = 25
AND c.IsDeleted = 0
AND s.lngStatus = 1
Run Code Online (Sandbox Code Playgroud) 我有一对 SQL Server 2014 数据库,设置为同步 AlwaysOn 可用性组。
两台服务器均设置为Synchronous commit可用性模式,会话超时时间为 50 秒。次级设置为Read-intent only可读辅助设备。
如果我写入主数据库,然后立即从辅助数据库读取(通过ApplicationIntent=ReadOnly),我会始终读取脏数据(即写入之前的状态)。如果我在写入和读取之间等待大约一秒钟,我就会得到正确的数据。
这是预期的行为吗?如果是这样,我可以采取什么措施来确保从辅助设备读取的数据是最新的?
我想使用辅助数据库作为主数据库的只读版本(以及故障转移),以减少主数据库的负载。
我们有一个Azure DevOps发布管道,该管道在一个位置设置了我们所有的Azure资源。我可以使用ARM模板成功创建所有内容,但是我正在努力将App Service与App Insights资源链接起来。
如果是手动执行的操作,请单击App Service的AppInsights刀片中的“打开网站扩展”按钮(在标题“通过网站扩展启用应用程序见解而无需重新部署代码”下)。
我尝试在发布管道中添加“ Azure App Service管理”步骤,设置为安装“ Azure App Service的Application Insights扩展”扩展:
另外,我在发布管道中添加了“ Azure App Service管理”步骤,设置为“启用连续监视”:
但是结果仍然是AppInsights已连接,但未安装扩展:
有什么办法可以自动执行此操作吗?通过ARM模板,PowerShell脚本还是其他?
编辑:在“扩展”刀片中,我可以看到“ Azure App Service的Application Insights扩展”(v2.6.5)和“ ASP.NET Core Logging扩展”(v2.2.0),但是仍然需要“打开”网站上的网站扩展”中的“ Aplication Insights”边栏。
azure azure-application-insights azure-web-app-service azure-devops azure-pipelines-release-pipeline
我想从SQL字符串中删除方括号,但仅限于其中没有空格的位置.
例如"SELECT [intId],[Description]"应返回"SELECT intId,[Description]".
我可以使用正则表达式获取方括号内部没有空格:
\[[^\s]*\]
Run Code Online (Sandbox Code Playgroud)
如何从原始字符串中删除这些匹配的方括号?
我有一个SQL Server 2008 R2数据库,其中存储过程可能存在也可能不存在.
如果我运行sp_help spThing,它会返回一行,就像它存在一样(名称:spThing,所有者:dbo,类型:存储过程).
如果我尝试创建一个具有相同名称的新存储过程,我会收到错误"数据库中已存在名为'spThing'的对象".
但
如果我运行SELECT OBJECT_ID('dbo.spThing'),它返回NULL.
如果我运行EXEC spThing,它会说"无法找到存储过程'spThing'".
如果我跑DROP spThing,它说"不能放弃程序'spThing',因为它不存在或你没有权限".
如果我跑SELECT * FROM sys.objects WHERE name = 'spThing',我没有排.
如果我跑SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'spThing',我没有排.
所有这些都是作为管理用户从同一连接运行的.
存储过程是否存在?
编辑:
SP本身是一个微不足道的选择,沿着以下方式:
CREATE PROCEDURE spThing
@Param int
AS
BEGIN
SELECT strThing
FROM tblThing
WHERE lngParam = @Param;
END
Run Code Online (Sandbox Code Playgroud) 我需要从 .Net 查找 SQL Server 2005 或 2008 数据库中列的默认值。
我的第一次尝试是执行存储过程:
sp_help @objname
Run Code Online (Sandbox Code Playgroud)
@objname桌子在哪里。然后在返回的第七个表(约束表)中,我将使用constraint_keys默认约束的值。当我从 SQL Server Management Studio 运行此查询时,它的行为符合预期,但当我从 C# 代码运行它时,该constraint_keys列为空(尽管所有其他列都已填充)。
我的第二次尝试是使用:
SELECT name, [text]
FROM syscomments com
INNER JOIN syscolumns col ON com.id = col.cdefault
WHERE col.id = object_id(@Table)
AND col.cdefault > 0
Run Code Online (Sandbox Code Playgroud)
这在 SQL Server Management Studio 中也可以正常工作。然而,当我从 .Net 运行它时,它不返回任何行。
额外的:
.Net 代码示例(使用企业库):
private DataTable GetDefaults(string tablename string database)
{
var db = DatabaseEL.Create(database);
string sql = @"
SELECT name, [text]
FROM syscomments com …Run Code Online (Sandbox Code Playgroud) 我在T-SQL中有一个简单的存储过程,从SQL Server Management Studio运行时是即时的,并且有一个简单的执行计划.它用在C#网络前端,通常很快,但偶尔似乎会让自己陷入一种状态,它会在那里停留并超时.然后它从任何Web服务器始终如一地执行此操作.修复它的唯一方法就是删除并重新创建它.它只发生在应用程序中使用的几百个类似过程中的单个存储过程中.
我正在寻找一个答案,它比每隔n分钟测试一次服务并在超时时删除并重新创建更好.
我需要使用.Net发出POST请求.
我可以通过GET进行身份验证,因此我尝试在同一连接上发出POST请求以保持身份验证.
问题是我得到401 Not Authenticated异常,这意味着连接没有被重用.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("my-server");
request.Credentials = new NetworkCredential("user", "password");
request.GetResponse().Close(); // Works fine
// Now the request I want to make...
request = (HttpWebRequest)WebRequest.Create("my-server");
request.Credentials = new NetworkCredential("user", "password");
request.Method = "post";
string postData = "param1=1¶m2=2";
byte[] data = new ASCIIEncoding().GetBytes(postData);
request.ContentLength = data.Length;
request.ContentType = "application/x-www-form-urlencoded";
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
stream.Close();
request.GetResponse().Close(); // This line gets a 401 Not Authorized error.
}
Run Code Online (Sandbox Code Playgroud)
编辑:有一些建议,我需要传输cookie.以下内容也不起作用:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("my-server");
request.Credentials = …Run Code Online (Sandbox Code Playgroud) c# ×5
sql-server ×4
sql ×3
t-sql ×2
.net ×1
acid ×1
alwayson ×1
azure ×1
azure-devops ×1
azure-pipelines-release-pipeline ×1
http ×1
httprequest ×1
regex ×1
replace ×1
string ×1
timeout ×1