我的生产环境中有一个MySQL数据库。它有大约4.3亿行,其中1.9亿行没有任何用处,所以我开始删除这些行的范围,在夜晚,因为它会影响我的应用程序在白天的表现。
现在,当我在监控应用程序中看到时,我看到100%IO,其中最大值是写入(12-30MB / s)。 (400-500写/秒) 但是当我检查进程列表时,我没有找到任何INSERT或UPDATE查询或任何回滚。
可能存在的问题是什么,或者如何找到可能在MySQL中编写的任何隐藏查询。
(在IOTP中,我发现写操作仅由mysqld完成) this fine answer
还有一件事,我可以在IOTOP中看到80MB / s的写入,但是当我在/中检查目录大小时,我看不到任何目录大小的上升。
答案 0 :(得分:1)
删除操作是否仍在进行中? DELETE可能非常慢并且会产生大量写入。通常最好创建一个新的相同表并将要保留的行复制到它,然后用生产表切换它,而不是直接删除生产表中的东西。
如果DELETE已经完成并且您怀疑还有其他查询正在运行,您可以启用查询日志几秒钟并查看执行了哪些查询:
TRUNCATE TABLE mysql.general_log;
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
SELECT SLEEP(10);
SET GLOBAL general_log = 'OFF';
然后从mysql.general_log中选择SELECT,以查看在10秒睡眠期间执行的查询。
答案 1 :(得分:1)
慢慢退后......等等。
InnoDB不会使用每个DML查询更改表空间文件中的实际数据。
它将更改写入内存,当然,然后是redo log,此时它们实际上是#34; live"并安全地保存到磁盘...但它们尚未应用于实际数据(表空间)文件。 InnoDB然后在后台同步对数据文件的更改,但同时,其他查询使用表空间和日志内容的组合来确定"官方"表数据目前包含。当然,这是过度简化,但MVCC必然意味着物理数据是逻辑数据的超集,但不一定是正确的超集。
这很可能是你现在所看到的解释。
有意义的是,空闲/使用的磁盘空间没有变化,因为最终删除这些行只会将表空间文件中的空间标记为未使用。他们不应该成长或缩小。
抵制诱惑试图修复"无论你做什么,都不要重新启动服务器...因为最好的结果是它会从它停止的地方开始,因为它还有工作要做。
import pandas as pd
from sklearn.linear_model import Ridge
import numpy as np
data = pd.DataFrame({"Name": ["A", "A", "A", "B", "B", "B"], "Score": [90, 80, 90, 92, 87, 80], "Age": [10, 12, 14, 9, 11, 12], "Training": [0, 1, 2, 0,$
modeldict = {} # INITIALIZE DICT
grouped_df = data.groupby(['Name'])
for key, item in grouped_df:
Score = grouped_df['Score']
Y = grouped_df['Age', 'Training']
Score_item = Score.get_group(key)
Y_item = Y.get_group(key)
model = Ridge(alpha = 1.2)
modelfit = model.fit(Y_item, Score_item)
modelpred = model.predict(Y_item)
modelscore = model.score(Y_item, Score_item)
modeldict[key] = modelfit # SAVE EACH FITTED MODEL TO DICT
line = [u"A, 13, 0", u"B, 12, 1", u"A, 10, 0"]
Name = [line[i].split(",")[0] for i in range(len(line))]
Age = [line[i].split(",")[1] for i in range(len(line))]
Training = [line[i].split(",")[2] for i in range(len(line))]
for i in range(len(line)):
Name = line[i].split(",")[0]
Age = line[i].split(",")[1]
Training = line[i].split(",")[2]
model = modeldict[Name]
ip = [float(Age), float(Training)]
score = model.predict(ip)
print score
需要一些练习来解释,但很可能是这个难题的另一个关键。