我试图在 SQL Server 中找到一些关于阻塞的信息,但我找不到关于它是什么以及它是如何发生的简明解释。你能帮我解惑吗?
从数学的角度来看,假设一个表最多有一个主键,通过任意名称而不是简单的表属性来引用主键似乎是一种短视的设计决定。
因此,要将主键从非集群更改为集群,反之亦然,您必须首先搜索其名称,而不是删除它并最终读取它。
使用我看不到的任意名称是否有一些优势,或者 DBMS 是否不使用任意名称作为主键?
编辑 2011-02-22 (对于那些不想在那里排序的人,2011 年 2 月 22 日):
让我展示一个函数,您可以使用它从表名中导出主键的名称(使用早期的 sql-sever 又名 sybase 系统表):
create function dbo.get_pk (@tablename sysname)
returns sysname
as
begin
return (select k.name
from sysobjects o
join sysobjects k on k.parent_obj = o.id
where o.name = @tablename
and o.type = 'U'
and k.type = 'k')
end
go
Run Code Online (Sandbox Code Playgroud)
正如 gbn 所说,当您不提供明确的名称时,没有人真正喜欢生成的名称:
create table example_table (
id int primary key
)
select dbo.get_pk('example_table')
Run Code Online (Sandbox Code Playgroud)
我刚得到
PK__example___3213E83F527E2E1D
Run Code Online (Sandbox Code Playgroud)
但是为什么 sysobjects 中的名称必须是唯一的。对表及其主键使用完全相同的名称是完全可以的。
这样做,我们不需要设置命名约定,这可能会被意外违反。
现在回答玛丽安:
这是我要找的:
如果您使用过该工具,我会对您发现的利弊感兴趣。我可以列出一个列表,但实际使用该工具的洞察力更有价值。
我的要求是:
目前,我们将高 CPU 超大实例的连接数最大化为 700。所有 8 个内核都已达到最大值。我们认为这是并发连接数,因为内存很好。写入本身非常简单(验证缓慢)。要扩展到 3000,我们需要转到多台服务器,当前选项:
要处理这个数量的连接,有几个问题:
如果我没有很好地描述我的问题,我深表歉意。请提问。
几个问题
Slave 条目是否会一直保留,直到对 Master 上的表进行可能影响 Slave 的插入/更新/删除操作?
如果没有,我如何确保从站与主站同步(通过删除从站条目或手动将该条目复制到主站)?
最重要的是,如何检测表不同步?
我们有一个应用程序,其中只有一个表将增长到数百万行,而其余的将略低于一百万行。那么我们应该使用 innodb_file_per_table 还是保留一个 .ibd 的建议是什么?我读过一些文章说不要使用它,因为在执行连接时您需要更多磁盘访问权限?为了报告生成目的,我们将在此表和其他表之间进行连接。
是否mysqldump -all-databases包括所有对象?
我必须将所有数据库迁移到新服务器。
在全新安装 XAMPP 并从我的 linux live db 导入到 windows 开发阶段后,我开始遇到INSERT. 其他一切似乎都运行良好。
我得到的错误mysql_error.log是:
2013-08-15 12:44:49 16c0 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
2013-08-15 12:44:49 16c0 InnoDB: Recalculation of persistent statistics requested for table "sizaradb"."pages" but the required persistent statistics storage is not present or is corrupted. Using transient stats instead.
2013-08-15 12:44:59 16c0 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
2013-08-15 12:44:59 16c0 InnoDB: Recalculation of persistent statistics requested for table "sizaradb"."translations" but the required persistent statistics storage is …Run Code Online (Sandbox Code Playgroud) 我安装了一个数据库,我想在 mysql 中备份它。问题是mysqldump导出 'maia_mail' 表失败
# mysqldump -u root -p maia > maia.sql
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `maia_mail` at row: 15
Run Code Online (Sandbox Code Playgroud)
它运行不到 30 秒并得到如上所示的错误。
DB 的总大小为 1.3GB,其中 maia_mail 表为 1.0GB
在my.cnf我有这些设置:
[mysqld]
max_allowed_packet = 1300M
[mysqldump]
max_allowed_packet = 1300M
Run Code Online (Sandbox Code Playgroud)
请就如何转储数据库提出建议或提供一些指导?
我正在开发一个在客户端 PC (Win) 上运行的应用程序,它配置了一个 MySQL 服务器 5.1 实例,它将充当远程主站的只读从站。远程主服务器有几十个模式,但我每个客户端只需要一个,所以我在 my.ini 中提供了replication-do-db设置以仅复制客户端需要的模式。复制有效,但是当我们的客户进入只能通过 3G 无线网络访问互联网的地区时,他们会迅速超出数据计划限制并遇到昂贵的问题。
据我了解,MySQL 将所有模式的所有事务写入单个 binlog 文件,这意味着每个客户端必须下载在主服务器上的每个模式上执行的所有事务,然后在下载后,对每个复制应用数据库过滤器 -客户端的 my.ini 文件中的do-db设置。
为了最大限度地减少这种低效率,我采用了slave_compressed_protocol = 1设置,这似乎将传输的数据减少了 50%,但仍然导致我们的客户快速超过他们的数据限制,从而增加了 3G 账单。
我无法想象我是唯一面临这个问题的人,所以我相信我会通过设置 x = y 来获得关于如何实现这一目标的大量答案。但是,我找不到有关此类设置的任何文档,也找不到推荐的方法。
到目前为止,这是我对可能解决方案的想法,请提供反馈或替代路线:
这应该导致客户端仅提取其架构的二进制日志数据。缺点(据我所知)是它极大地增加了我们设置的复杂性,可能使其更加脆弱。
想法?这种方法甚至会奏效吗?
请注意,我们在 RedHat 上运行 MySQL 5.0 服务器,但如果它产生解决方案,我们可以升级到 5.5。
mysql ×7
replication ×3
backup ×2
innodb ×2
mysqldump ×2
cassandra ×1
linux ×1
locking ×1
mongodb ×1
mysql-5.0 ×1
mysql-5.1 ×1
mysql-5.5 ×1
mysql-5.6 ×1
oracle ×1
oracle-se ×1
performance ×1
primary-key ×1
sql-server ×1
windows ×1