我有两个java进程,即票据创建和账单守护进程。这两个过程都使用相同的MySQL Innodb表“计费”。工单创建主要是创建计费工单,包括用户的插入/更新工单。计费守护进程检索票证,然后将计费发送给用户,最终将结果(成功/失败)更新到“计费”表。每天为成千上万的用户创建帐单,如果今天创建帐单,则称为“新票证”,以前创建的其他票证称为“旧票证”。我面临的问题是,这两个过程都使用相同的表,并且插入/更新记录变得非常慢。我尝试过的解决方案
1. Stopped billing while ticket creation: I got late to bill users and billing
s
在最近的一个问题/放慢我们的一个从数据库时,我注意到当我运行SHOW ENGINE INNODB STATUS时。我得到了以下信息:
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 822986039, signal count 17045541908
--Thread 140562108442368 has waited at row0sel.c line 2930 for 0.00 seconds the semaphore:
S-lock on RW-latch at 0x7fd752e55c4
我使用Google使用机器类型的、db-F1-微,用于部署在标准环境中Google上的项目。有时,我在与数据库连接时出错。当同时在多个选项卡中打开同一页时(load/performance),就会发生这种情况。
项目中使用的源代码
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received
这是我的代码的简化版本,在其中每个进程爬行链接并获取数据,并将其并行存储在数据库中。
def crawl_and_save_data(url):
while True:
res = requests.get(url)
price_list = res.json()
if len(price_list) == 0:
sys.exit()
# Save all datas in DB HERE
# for price in price_list:
# Save