Azure 自定义 API:执行数据库事务返回超时
azure custom apis: performing database transaction returns a timeout
在 Azure 自定义 API 上,我正在尝试利用数据库转换对三个表执行批量插入操作。然后我在控制台上遇到此错误。
请求"POST/api/saveinvite"已超时。这可能是由于脚本无法写入响应,或者无法及时从异步调用返回导致的。
exports.post = function (request, response) {
console.log("save invite executed!!");
var jsonfriendcircle = request.body.jsonfriendcircle;
var jsoninviteelist = request.body.jsoninviteelist;
var jsoninviteefriendcirclelist = request.body.jsoninviteefriendcirclelist;
console.log("Circle is :" + jsonfriendcircle);
console.log("Inviteelist is :" + jsoninviteelist);
console.log("Inviteefriendcirclelist is :" + jsoninviteefriendcirclelist);
var parsedjsfrcircle = JSON.parse(jsonfriendcircle);
var mssql = request.service.mssql;
console.log("mssql obj :" + mssql);
mssql.open({
success: function (connection) {
console.log("connection to db success");
console.log("circle id: " + parsedjsfrcircle["id"]);
console.log("circle name :" + parsedjsfrcircle["circle_name"]);
var sqlst1 = 'insert into friendcircle (id,circle_name)values(?,?)';
connection.query(sqlst1, [parsedjsfrcircle["id"], parsedjsfrcircle["circle_name"]], function (err, results) {
if (err) {
console.log("Error:" + err);
connection.rollback();
response.send(statusCodes.Error, { message: '' });
connection.close();
return;
} else {
// connection.commit();
// connection.close();
}
});
}
, error: function (err) {
console.log("Unable to connect to DB :" + err);
response.send(statusCodes.Error, { message: err });
}
});
};
看起来你并没有试图做太多。 插入几百行应该在超时之前返回。如果移动服务用户对数据库表的权限存在问题,并且事务和自定义错误处理可能隐藏了该问题,则会出现超时。 确保您已运行
GRANT SELECT, INSERT, UPDATE ON OBJECT::[dbo].[Invitee_FriendCircle] TO [Created_MobileServicesLogin_User]
--For whatever name was created when you made the app (not the name you entered when you created the app, but the wacky one that mobile services made)
可以尝试的一些方法:确保要插入到的表已针对您正在执行的插入类型编制索引。 如果它是一个巨大的表并且索引是一个问题,请让移动 api 插入到一个小临时表中,然后使用 sp_start_job 运行异步作业以使用临时表更新主表。 这样,您就不会在表执行更新时等待。
在包含插入的数据库中编写存储过程,并将变量传递到其中,而不是在此处编写 INSERT 查询。 在 sproc 中,如果您确实要传递大量值并且需要快速完成,您也可以执行批量插入。
修改数据库的连接字符串中的"连接超时"属性。您可以修改 request.service.config.sqlConnectionString。
尝试将其剥离以找到问题。 删除事务,然后尝试在没有事务和自定义错误处理程序的情况下执行此操作,一次只对一个表执行。 尝试
exports.post = function(request, response) {
var jsonfriendcircle=request.body.jsonfriendcircle;
var jsoninviteelist=request.body.jsoninviteelist;
var jsoninviteefriendcirclelist=request.body.jsoninviteefriendcirclelist;
var mssql=request.service.mssql;
var sqlst1='insert into FriendCircle (id,circle_name)values(?,?)' ;
mssql.query(sqlst1,[jsonfriendcircle.id,jsonfriendcircle.circle_name], {
success: function(results) {
response.send(statusCodes.OK, { message : 'success' });
},
error: function(err) {
console.log("error is: " + err);
}
});
};
一次尝试一个,看看是否有任何失败,如果失败,请检查 Azure 门户上的 LOGS,看看是否是权限问题。
祝你好运!
可能是 30 秒后事务超时?在 SQL 中,默认的最大事务超时是多少
尝试将插入重写为多个较小的事务
相关文章:
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 如何通过php页面将数据库值检索到jquery自动完成框中
- 使用javascript从数据库中添加表
- 通过CSV文件上载更新数据库表
- 平均值:无法将数据更新到数据库
- 电话间隙等待数据库事务完成
- 在 Phonegap 中的数据库事务语句之前发出警报触发
- Azure 自定义 API:执行数据库事务返回超时
- 如何使用 Node 从单个连接/事务进行多个数据库调用.js而且繁琐
- 如何在事务中创建索引数据库存储
- 处理错误后提交索引数据库事务
- 处理数据库事务返回
- 如何等待数据库事务完成它的操作并在phonegap中返回值
- Firebase事务不会更新Firebase数据库中的实际值
- 我如何才能确保我不会;t执行同一数据库事务两次
- HTML5数据库-事务VS executeSql回调顺序
- HTML5/js sqlite数据库不输入事务功能
- 使用web数据库的Phonegap错误:"表达式mydb的结果.事务不是一个函数
- Javascript数据库事务处理错误,无法准备没有列的语句
- 如何传递参数到PhoneGap数据库事务函数