小编Rol*_*DBA的帖子

从 C# VS SSMS 执行相同的请求会产生不同的执行时间

我有一个这样的请求

SELECT 
[EstimateId], 
[CreationUserId], 
[EstimateStatusValueId], 
[LanguageId], 
[LocationId], 
[EstimatorUserId], 
[FilterUnitSystemTypeId], 
[EstimateNumber], 
[RevisionNumber], 
[CreationDate], 
[ModificationDate], 
[ProjectDescription], 
[IsBsdq], 
[ClosingDate], 
[ClosingTime], 
[ClosingUpdatedOn], 
[DeadLineDate], 
[IsReceived], 
[Inclusion], 
[Exclusion], 
[Misc], 
[Note], 
[WorkDeadLines], 
[Comments], 
[Validity], 
[PlansLocation], 
[PlansReceivedFrom], 
[Price]
FROM [Estimate].[Estimates] 
ORDER BY [ClosingDate] ASC, [ClosingTime] ASC
Run Code Online (Sandbox Code Playgroud)

当我在 SSMS 中运行此查询时,执行时间为 953 毫秒,但是当我从 C# 中的 Linq 查询运行此查询时,执行时间为 1813 毫秒。

Linq 查询使用“.Net SqlClient 数据提供程序”并针对 EntityFramework(EDMX 文件)发出。这可能是一个问题吗?

有谁知道为什么我在那些相同但从不同上下文针对同一数据库执行的请求的执行时间之间有很大差异?

我验证了两个请求的所有执行计划,它们使用相同的索引来满足各自的查询。

要查看 C# 请求的执行计划,我使用 SQL 分析器捕获 Show Plan XML 事件,并将其与 SSMS 之一进行比较,两者相同。

sql-server-2008 database-tuning

12
推荐指数
2
解决办法
1359
查看次数

重启 MySQL 复制从站

自从它设置以来,我第一次需要重新启动只读的 MySQL 复制从属设备。

我找到了这篇关于关闭从属设备进行维护的文章(尽管他只是在描述停止mysql守护进程):

如何安全地[原文如此] 重新启动您的 MySQL 从属服务器

概括起来,程序是:

mysql客户端:

STOP SLAVE;
FLUSH TABLES;
Run Code Online (Sandbox Code Playgroud)

从操作系统:

/etc/init.d/mysql stop
Run Code Online (Sandbox Code Playgroud)

我会在此时重新启动,然后在系统启动后:

mysql客户端(mysql守护进程被配置为在启动时启动):

START SLAVE;
Run Code Online (Sandbox Code Playgroud)

这看起来对吗?还有什么我应该做的吗?

mysql replication

12
推荐指数
1
解决办法
1万
查看次数

什么是 Key Preserved Table 概念?

我在更新连接视图部分中阅读了有关密钥保留表的 Oracle 文档。

但是,我没有找到任何简单的方法来理解它。

我希望收到一些简单的概念细节,而不是 Oracle 官方文档。

oracle

12
推荐指数
2
解决办法
3万
查看次数

MySQL 复制 - 从站一直落后于主站

我正在使用 MySQL-5.1.50 和主从复制设置。

大多数情况下,slave 落后于 master。

当我运行时show processlist;,没有需要很长时间的查询。我也启用slow_log了。但是,它没有发现任何运行缓慢的查询。

从站不断发出警报,指出复制落后于主站几秒钟。有时,滞后时间会增加。

如何诊断问题的原因?

我需要紧急帮助,因为这个问题已经持续了 20 天。

mysql replication mysql-5.1

12
推荐指数
2
解决办法
3万
查看次数

为什么默认 character_set_server 是 latin1?

我正在使用 MySQL 5.5,当我显示有关字符集的变量时,我有

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
Run Code Online (Sandbox Code Playgroud)

我是否需要将character_set_database和更改character_set_serverutf8

mysql percona character-set mysql-5.5 utf-8

12
推荐指数
1
解决办法
5万
查看次数

即使在 READ COMMITTED 中,MySQL InnoDB 也会在删除时锁定主键

前言

我们的应用程序运行多个DELETE并行执行查询的线程。查询影响孤立的数据,即不应该存在并发DELETE发生在来自不同线程的相同行上的可能性。但是,根据文档,MySQL 对DELETE语句使用所谓的“next-key”锁,它同时锁定匹配的键和一些间隙。这会导致死锁,我们找到的唯一解决方案是使用READ COMMITTED隔离级别。

问题

DELETE使用JOIN大表执行复杂语句时会出现问题。在特定情况下,我们有一个带有警告的表,只有两行,但查询需要从两个单独的INNER JOINed 表中删除属于某些特定实体的所有警告。查询如下:

DELETE pw 
FROM proc_warnings pw 
INNER JOIN day_position dp 
   ON dp.transaction_id = pw.transaction_id 
INNER JOIN ivehicle_days vd 
   ON vd.id = dp.ivehicle_day_id 
WHERE vd.ivehicle_id=? AND dp.dirty_data=1
Run Code Online (Sandbox Code Playgroud)

当 day_position 表足够大时(在我的测试用例中有 1448 行),那么即使使用READ COMMITTED隔离模式,任何事务也会阻塞整个 proc_warnings表。

该问题始终在此示例数据上重现 - http://yadi.sk/d/QDuwBtpW1BxB9在 MySQL 5.1(在 5.1.59 上检查)和 MySQL 5.5(在 MySQL 5.5.24 上检查)中。

编辑:链接的示例数据还包含查询表的架构和索引,为方便起见,在此处复制:

CREATE TABLE  `proc_warnings` (
    `id` int(11) NOT NULL AUTO_INCREMENT, …
Run Code Online (Sandbox Code Playgroud)

mysql innodb mysql-5.5 locking isolation-level

12
推荐指数
1
解决办法
6876
查看次数

导出包含所有关系数据的数据的工具?

是否有工具可以从表中的选定行导出数据,并将所有数据存储在其他表中的其他表中,并通过关系设计链接?

目的是为了方便临时迁移服务器之间的数据位迁移。我正在寻找一个专门为 MySQL InnoDB 定义外键的工具。

mysql mysqldump tools backup migration

12
推荐指数
1
解决办法
8322
查看次数

MySQL 复制:“主键的重复条目”

你能帮我理解为什么我在完全重新同步后在从服务器上收到“主键的重复条目”。

基本上'mysqldump'几乎整晚都在运行,然后恢复过程花了几个小时,所以当我启动slave时,它比master慢了~63874秒。

从服务器是只读的(read_only)并且在重新同步过程中没有任何写入,所以我不明白为什么会有重复的密钥。

二进制日志格式在 master 上设置为 MIXED。

用于备份数据库的命令:

mysqldump --opt --single-transaction -Q --master-data=2 db | bzip2 -cz > db.sql.bz2
Run Code Online (Sandbox Code Playgroud)

从站仅从主站(db -> db_backup)复制一个数据库,并使用以下选项:

replicate-wild-do-table = db_backup.%
replicate-rewrite-db = db->db_backup
Run Code Online (Sandbox Code Playgroud)

mysql replication mysqldump

12
推荐指数
1
解决办法
3万
查看次数

获取 MySQL 数据库架构备份所需的最低权限是什么?

获取 MySQL 数据库架构备份所需的最低权限是什么?我只对模式感兴趣,对数据不感兴趣。

是否需要 SELECT 权限?

mysql mysqldump backup

12
推荐指数
1
解决办法
9534
查看次数

如何将值从两个不同的表插入一个表?

我有三张桌子

students table 
------------------------------------  
id(PK, A_I)  |  student_name | nationality

teachers table
------------------------------------
id(PK, A_I)  |  teacher_name |  email

classroom table
----------------------
id(PK, A_I)   | date   | teacher_id(FK to teachers.id)  |  student_id(FK to students.id)
Run Code Online (Sandbox Code Playgroud)

如果我得到了老师的名字(david例如)和student_id数据(7例如),并要求插入teacher_idclassroom基于表idteachers表,我会做:

insert into classroom (date, teacher_id, student_id)
select '2014-07-08', id, 7
from teachers
where teacher_name = 'david';
Run Code Online (Sandbox Code Playgroud)

现在,如果我没有直接获得学生的 id 而只给我学生的名字怎么办?假设我得到了老师的名字“大卫”和学生的名字“山姆”。我如何获取teacher_idteachers表中,也student_idstudents表和插入双双进入classroom表基于各自的名称?

mysql relational-theory

12
推荐指数
2
解决办法
13万
查看次数