我有一个这样的请求
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 之一进行比较,两者相同。
自从它设置以来,我第一次需要重新启动只读的 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)
这看起来对吗?还有什么我应该做的吗?
我在更新连接视图部分中阅读了有关密钥保留表的 Oracle 文档。
但是,我没有找到任何简单的方法来理解它。
我希望收到一些简单的概念细节,而不是 Oracle 官方文档。
我正在使用 MySQL-5.1.50 和主从复制设置。
大多数情况下,slave 落后于 master。
当我运行时show processlist;,没有需要很长时间的查询。我也启用slow_log了。但是,它没有发现任何运行缓慢的查询。
从站不断发出警报,指出复制落后于主站几秒钟。有时,滞后时间会增加。
如何诊断问题的原因?
我需要紧急帮助,因为这个问题已经持续了 20 天。
我正在使用 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_server为utf8?
前言
我们的应用程序运行多个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 定义外键的工具。
你能帮我理解为什么我在完全重新同步后在从服务器上收到“主键的重复条目”。
基本上'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 数据库架构备份所需的最低权限是什么?我只对模式感兴趣,对数据不感兴趣。
是否需要 SELECT 权限?
我有三张桌子
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_id到classroom基于表id的teachers表,我会做:
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_id从teachers表中,也student_id从students表和插入双双进入classroom表基于各自的名称?