我正在尝试将查询结果存储在临时表中以供进一步处理.
create temporary table tmpTest
(
a FLOAT,
b FLOAT,
c FLOAT
)
engine = memory;
insert into tmpTest
(
select a,b,c from someTable
where ...
);
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,插入需要一分钟,而单独的子选择只需要几秒钟.为什么将数据写入临时表而不是将其打印到我的SQL管理工具的输出需要这么长时间?
更新 我的设置:MySQL 7.3.2集群,带有8个Debian Linux ndb数据节点1个SQL节点(Windows Server 2012)
我正在运行select on的表是一个ndb表.
我试图找出,如果执行计划在使用'insert into ..'时会有所不同,但它们看起来一样:(抱歉格式化,stackoverflow没有表格)
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <subquery3> ALL \N \N \N \N \N \N 1 PRIMARY foo ref PRIMARY PRIMARY 3 <subquery3>.fooId 9747434 Using where 2 SUBQUERY someTable range PRIMARY PRIMARY 3 \N 136933000 …
如果我创建一个包含4个worker(我的应用程序的4个实例)的节点集群应用程序,我应该使用mySQL池还是mysql池集群?如果我使用池,它将为每个应用程序创建一个池但如果我使用池集群,它将为每个应用程序创建4个池(总共16个).这是一个很好的实现还是会降低性能?
首先,让我们为mysql数据库创建配置文件(重要的是我创建db worker的这个文件的最后一部分):
DBconfig.js
'use strict'
const mysql = require('mysql'),
workers = process.env.WORKERS || require('os').cpus().length,
cluster = require('cluster');
//Local Database Settings
const local_settings = {
user : 'user',
host : '127.0.0.1',
password : 'pass',
database : 'dbname',
debug : false,
dateStrings: true,
connectionLimit : 10,
defaultSelector : 'RR',
multipleStatements : true,
removeNodeErrorCount: 1
};
let poolCluster = module.exports = mysql.createPoolCluster( local_settings );
//here I make one db worker for each app worker
for(let i = 0; i < …Run Code Online (Sandbox Code Playgroud) 我面临一个只在Windows上发生的有趣问题,而在Linux/Mono上一切正常.我已经构建了一个围绕MySQL Cluster NDB API库的C++包装器,我通过P/Invoke从C#代码调用它.到目前为止,我有三种方法:
init() 初始化环境并返回句柄read() 它使用句柄从数据库中读取数据release() 它释放资源init()在每个设置中都能正常工作 但是,read()抛出AccessViolationException,但仅限于Windows,并且仅init()在一个线程和read()另一个线程中调用时.如果我们在一个线程中做所有事情,那就有效!任何关于可能原因的想法将不胜感激.
2016年12 月4日更新 - 一个简单的C++测试程序注意到了同样的行为,init()在一个线程和read()另一个线程中调用.因此,错误没有任何与C#/ C++互操作,这是NDB API库之内的东西,可以下载这里(lib文件夹,mysqlclient.lib和ndbclient_static.lib).
C#代码:
private const string ndbapi = "ndb";
[DllImport(ndbapi)]
public extern static IntPtr init(IntPtr conn_string);
[DllImport(ndbapi)]
public extern static void read(IntPtr ndb_cluster_conn);
[DllImport(ndbapi)]
public extern static void release(IntPtr ndb_cluster_conn, IntPtr char_arr_ptr);
private static IntPtr handle;
private static void InitNdb() {
unsafe …Run Code Online (Sandbox Code Playgroud) 今天我的数据中心出现断路器故障导致我的服务器断电.我正在运行一个4节点的MySQL集群.我重新启动了集群,首先是管理节点,然后是数据节点,然后在数据节点运行后我启动了SQL节点.然后我用ndb_mgm -e SHOW检查了集群.在我尝试运行查询之前,一切似乎都很好.我收到了这个错误,
ERROR 1296(HY000):从NDBCLUSTER获得错误157'未知错误代码'
我检查MySQL日志,找不到任何错误.然后我尝试完全关闭并重新启动MySQL集群,并在关闭和启动之间检查配置.一切似乎都结束了.然后,我使用NDBCLUSTER引擎在另一个数据库上运行查询.查询成功了.我试过搜索谷歌但没有人似乎有任何答案有帮助.我已经检查了配置,我确保ndbd正在数据节点上运行,等等.其他数据库似乎工作正常,除了这个.我有数据库的备份,但如果可能的话,我最好还是恢复数据库.
如果有人有任何建议或想法,将不胜感激.
提前致谢.
下面是不使用最近创建的复合索引的更新查询/查询计划。解释表明,它不使用命名的复合索引radacctupdate,我认为这将使更新查询更快。表上还有其他索引,这些索引可供其他查询使用。
EXPLAIN UPDATE radacct SET acctstoptime = '2017-01-08 11:52:24',
acctsessiontime = unix_timestamp('2017-01-08 11:52:24') - unix_timestamp(acctstarttime),
acctterminatecause = '', acctstopdelay = 14855646
WHERE acctstoptime IS NULL AND
nasipaddress = '102.34.56.234' AND acctstarttime <= '2017-01-08 11:52:24';
************* 1. row ***********
id: 1
select_type: SIMPLE
table: radacct
type: range
possible_keys: acctstarttime,acctstoptime,nasipaddress,radacctupdate
key: nasipaddress
key_len: 17
ref: const
rows: 94
Extra: Using where; Using MRR
Run Code Online (Sandbox Code Playgroud)
下面是show index from <table>输出
+---------+------------+-----------------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name …Run Code Online (Sandbox Code Playgroud) 我们使用 MySQL 5.6 InnoDB 引擎来实现我们的数据库目的。目前我们只有一个实例,但随着我们的应用程序不断增长,我们希望数据库处于集群模式。现在我们已经做了什么:
我们尝试了 MySQL NDB cluster 7.3.1(实验室版本):但我们仍然面临外键问题,而且它似乎并不可靠。所以我们尝试了下一个选项。
我们尝试使用 DRBD、pacemaker 和 corosync 进行 mysql 主动/被动集群:在两个节点上一切正常。
现在我们想做Mysql主动-主动集群,即使经过很多google我也找不到任何关于它的信息,我们可以用DRBD来做到这一点还是有其他方法可以做到这一点。
请帮忙 !!!!!
我有一个 2 个实例 RDS Aurora 集群(一名写入者和一名读取者)。我的读者实例需要与作者的大小相同是否有任何原因?
使用 db.r3.4xlarge(写入器)和 db.r3.2xlarge(读取器)创建集群是否有任何问题?
我的作者使用的 CPU 负载比我的阅读器多得多,因此我想缩小阅读器的规模,这样就不仅仅是浪费钱了。作为编写器,它甚至从未使用 1/2 的 CPU。这有什么问题吗?我查看了 AWS 文档,但找不到任何提及。
我想知道使用MySQL Cluster和使用Hadoop框架的优点/缺点.什么是更好的解决方案.我想看看你的意见.
我认为使用MySQL Cluster的优点是:
而且我没有看到劣势!Hadoop没有任何缺点吗?
Hadoop与Hive的优势在于:
缺点是:
因此,在我看来,处理大数据时MySQL集群是更好的解决方案.为什么Hadoop是处理大数据的圣杯?你有什么意见?
我将在我的项目中处理大量数据.我已阅读有关大数据概念但尚未使用它的信息.但是阅读所有这些大数据文档我仍然不确定我的需求是否需要大数据,或者处理传统的关系数据库是否合适.
以下是有关我的数据库的一些信息.
我的主DB是不同数据源的存储库.每个数据源都处理相同类型的数据(同一域中的数据),但是某些数据源包含额外的字段,这些字段在其他数据源中不可用,而某些数据源包含的字段较少.换句话说,这些数据源中的一些数据字段是相同的,但有些是不同的.所以我的核心数据库应该包含所有这些字段.我的核心数据库中的总字段大约应为2000个字段,并且可能包含1000万到2000万条记录.
在我的核心数据库中发生的数据库操作将是数据插入和读取(搜索).由于它处理大量数据,我正在考虑使用大数据概念.但我仍然不确定这是否适合大数据.因为我的一些数据具有相似的特征(相同的字段),而另一些则包含额外的信息.我需要在我的数据库中快速搜索所有类型.谢谢.
mysql ×6
amazon-rds ×1
bigdata ×1
c++ ×1
drbd ×1
explain ×1
hadoop ×1
hive ×1
insert-into ×1
mapreduce ×1
node-cluster ×1
node-mysql ×1
node.js ×1
nosql ×1
performance ×1
temp-tables ×1