我最近看到一些非常基本的更新超时,但无法确定原因。一个例子:
//# Query_time: 51 Lock_time: 0 Rows_sent: 0 Rows_examined: 0
UPDATE photos SET position = position + 1 WHERE (photo_album_id = 40470);
同一个日志没有 Lock_time > 0 的条目。运行show innodb status也不会显示任何相关的锁。根据我的应用服务器日志(显示Mysql::Error: Lock wait timeout exceeded与 mysql-slow 日志中的每个相应条目相关的错误),此问题似乎影响了至少 5 个不同的表。
知道从这里去哪里吗?我在各个方向都陷入了死胡同。谢谢。
编辑:
创建表`照片`( `id` int(11) NOT NULL auto_increment, `type` varchar(255) 非空, `photo_album_id` int(11) 非空, `user_id` int(11) 非空, `title` varchar(255) 默认为“无标题”, `描述`文本, `credit` varchar(255) 默认为 NULL, `photo_file_name` varchar(255) 默认为 NULL, `photo_content_type` varchar(255) 默认为 NULL, `photo_file_size` int(11) 默认为 NULL, `photo_updated_at` 日期时间默认为 …
我有一个领域,人们历史上可以用来自由提供价值。我需要识别没有适当值的记录,以便我可以清理它们。
为此,我一直在 SSIS 中四处寻找。我的倾向是在某些 C# 代码中使用带有正则表达式的脚本组件,然后进行重定向。不过,我想知道 SSIS 中是否有一种方法可以在不求助于 C# 的情况下做到这一点。
我没有太多运气找到一种方法来找出有多少记录没有合适的电话号码。
我正在寻找一种创建查询以执行以下操作的方法:
让我们考虑 3 个表:
让我们考虑每个表的这种结构:
产品:
标签:
标签关系:
我想要的是:
例如,获取所有标记为标签 id 10、11 和 12 的产品。
此查询不起作用,因为它返回至少具有以下标签之一的产品:
select
p.name as name,
p.id as id
from
products p inner join tag_ties ties
on
p.id=ties.ref_id
where
ties.ref_id=p.id and
ties.tag_id in (10,11,12)
group by
p.id
order by
p.name asc
Run Code Online (Sandbox Code Playgroud) 我有两个员工名单:
List A:
StaffID Supervisor
====================
0001234 NULL
0001235 0001234
0001237 0001234
0001239 0001237
Run Code Online (Sandbox Code Playgroud)
和
List B:
StaffID Supervisor
====================
0001234 NULL
0001235 0001234
0001238 0001235
0001239 0001235
Run Code Online (Sandbox Code Playgroud)
我需要以下输出:
StaffID SupervisorA SupervisorB
===================================
0001234 NULL NULL
0001235 0001234 0001234
0001237 0001234 NULL
0001238 NULL 0001235
0001239 0001237 0001235
Run Code Online (Sandbox Code Playgroud)
请注意,列表 A 和列表 B 中的员工 ID 已合并到一个不重复的列表中,并且我已合并了两个列表之间可能不匹配的两个主管详细信息。
查询不必很好。我在每个列表中有大约 8000 条记录,我会很好地运行它。如有必要,我很乐意在之后进行一些小的 Excel 操作。
我想做一个完整的联接,但联接上的 Access 查询设计器属性窗口允许我从表 A 中选择 ALL 并从表 B 中进行匹配、从表 B 中选择 ALL 并从表 A 中进行匹配,或者仅选择在两个 A 中都匹配的那些和 B。
我确信这很简单,但我很少使用 MS …
因此,托管我们的 SQL Server 的公司似乎在从生产服务器到备份服务器的复制方面遇到了一些麻烦……不过我相信有些表已经正确复制了。每天(下班后)进行复制。
有没有办法可以比较 2 个相同的表,1 个来自备份,1 个来自生产服务器,看看昨晚的复制是否有效?
我能找到的唯一方法是在两台服务器上运行以下查询并查看结果是否匹配,这“可能”意味着 2 个表包含相同的信息。
SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM (
SELECT *
FROM table_to_compare
) t1
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,似乎该表确实复制成功,因为校验和值相同,但我不确定这种方法有多可靠。
有谁知道更好的方法来检查这个或者这是否是一个好方法?
我在 Windows Server 2008 计算机上运行 SQL Server 2008。
谢谢。
我遇到了类似的查询
INSERT INTO mytable (id, Created, Updated) VALUES (null, NOW(), NOW())
Run Code Online (Sandbox Code Playgroud)
有列定义
| Created | datetime |
| Updated | datetime |
Run Code Online (Sandbox Code Playgroud)
在这种情况下,MySQL 是否会将 NOW() 值设置为当前时间并向两个调用返回相同的值,或者该查询是否会运行(不太可能)风险,即 Created 和 Updated 的时间略有不同?
注意:我无法更改字段类型。
这是从临时表中进行的简单选择,在其主键上加入现有表,两个子选择使用 top 1 引用连接表。
在代码中:
SELECT
TempTable.Col1,
TempTable.Col2,
TempTable.Col3,
JoinedTable.Col1,
JoinedTable.Col2,
(
SELECT TOP 1
ThirdTable.Col1 -- Which is ThirdTable's Primary Key
FROM
ThirdTable
WHERE
ThirdTable.SomeColumn = JoinedTable.SomeColumn
) as ThirdTableColumn1,
(
SELECT TOP 1
ThirdTable.Col1 -- Which is also ThirdTable's Primary Key
FROM
ThirdTable
WHERE
ThirdTable.SomeOtherColumn = JoinedTable.SomeColumn
) as ThirdTableColumn2,
FROM
#TempTable as TempTable
LEFT JOIN
JoinedTable
ON (TempTable.PKColumn1 = JoinedTable.PKColumn1 AND
TempTable.PKColumn2 = JoinedTable.PKColumn2)
WHERE
JoinedTable.WhereColumn IN (1, 3)
Run Code Online (Sandbox Code Playgroud)
这是我的查询的精确副本。
如果我删除两个子选择,它运行得很好而且很快。通过两个子选择,我每秒得到大约 100 条记录,这对于这个查询来说非常慢,因为它应该返回近一百万条记录。
我已经检查过是否每张表都有一个主键,他们都有。它们都有重要列的索引和统计信息,就像那些 WHERE 子句中的那些,以及 JOIN …
有人可以告诉我这个表定义有什么问题。
mysql 版本是 5.1.52-log
root@localhost spoolrdb> create table spoolqueue (
queue int,
idx bigint not null auto_increment,
status smallint,
querystring varchar(2048),
contenttype varchar(255),
characterencoding varchar(16),
body text,
primary key(queue,idx)
);
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个查询,允许检索整个模式的外键信息(每行:引用表和字段、引用表和字段)。
我找到了这个,但没有提供我需要的所有信息:https : //stackoverflow.com/questions/4389228/sql-for-oracle-to-check-if-a-constraint-exists
我目前正在研究它,可能会在接下来的几分钟/几小时内得到解决方案。但是如果有人已经有了完整的工作解决方案,我会很高兴知道它:)
我有一个 ASP.NET 网站,它自己独立缓存数据,并且数据在很长一段时间内不会改变,所以它不需要用相同的查询第二次查询 SQL Server。我需要提高到该 SQL Server 的首次(原始)查询的性能。某些查询处理的数据过多,可能会导致 SQL Server 使用tempdb. 我不使用临时表变量或临时表,因此 SQL Server 决定tempdb在需要时自行使用。
我的数据库大小是 16Gb,我的服务器机器上有 32Gb 的物理 RAM。
我知道 MS SQL Server 缓存策略会尝试将数据保留在 RAM 中,以在类似查询需要再次加载相同数据时提高它们的性能。除此之外,它会尝试使用可用 RAM 而不是 tempdb 来提高性能,而不会导致磁盘访问。
我想当需要在 tempdb SQL Server 中存储某些内容的查询出现并且没有足够的可用 RAM 时,SQL Server 有两种选择:
1) 卸载一些缓存数据并使用备用 RAM 而不是 tempdb 以避免磁盘写入
2) 为将来的查询保留缓存数据并开始使用 tempdb,这会导致写入磁盘速度变慢。
我不知道 SQL Server 在这种情况下会做出什么选择,但我希望它做出选择 #1,因为我只关心首次(原始)查询的性能,因为我再也不会向 SQL Server 发送相同的查询(虽然我可能会发送类似的查询)。
这种情况下的 SQL Server 缓存策略是什么?
它如何在避免原始查询的 tempdb 和第二次查询的速度之间平衡 RAM 的使用?
是否可以将 SQL Server 配置为做出选择 #1 的方式?如果是,那么如何?
我还能如何提高所有原始 SQL 查询的性能?
由于我不知道 …
query ×10
mysql ×3
sql-server ×3
cache ×1
datetime ×1
foreign-key ×1
innodb ×1
join ×1
mariadb-10.2 ×1
ms-access ×1
oracle ×1
performance ×1
sqlite ×1
statistics ×1
subquery ×1