小编tvm*_*tvm的帖子

需要调整此SQL查询以提高性能

我有以下查询.由于其中的子查询,这会降低性能.我尝试了很多来添加Join而不是Subquery.但是徒劳无功 任何人都可以告诉我如何使用JOIN重写此查询?

update Table_1
set status = 'Status_2' 
where status ='status_1' and (col_1, col_2, col_3, nvl(col_4,0), col_5) in ( 
               select col_1, col_2, col_3, nvl(col_4,0), col_5 from Table_2 where status ='Status_0');
Run Code Online (Sandbox Code Playgroud)

请看SELECT * FROM table(DBMS_XPLAN.Display);下面的内容

Plan hash value: 1290346170
------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name                 | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------------------
|   0 | UPDATE STATEMENT              |                      |     1 |   376 |   456   (3)| 00:00:06 |
|   1 |  UPDATE                       | Table_1              |       | …
Run Code Online (Sandbox Code Playgroud)

sql database oracle query-performance sql-tuning

6
推荐指数
1
解决办法
140
查看次数

实现非阻塞远程日志处理程序

我正在尝试实现简单的日志处理程序,它使用 Python 的标准logging库将事件记录到远程服务器。所以我创建了从logging.Handler调用继承的自定义类,RemoteLogHandler它接受LogRecord并将其发送到远程服务器。处理程序以标准addHandler()方式附加到根记录器。

from urllib import requests

class RemoteLogHandler(logging.Handler):
    def emit(self, record):
        remote_url = "http://foo.bar.baz"
        req = request.Request(remote_url, data=record.msg)
        request.urlopen(req, timeout=1)
Run Code Online (Sandbox Code Playgroud)

这按预期工作,但当 remote_url 变得不可访问或开始响应缓慢时,显然会导致调用线程锁定。所以我试图找出使这个调用独立于调用线程的最佳方法。

我考虑过的:

  1. 包括一些会使 http 请求异步的非标准库
  2. 使用此处概述的 QueueHandler 和 QueueListener
  3. 使用异步

所有这些解决方案对于实现如此简单的任务似乎都过于复杂/不必要。是否有一些更好的方法以更少的开销来使这个处理程序非阻塞?

python logging asynchronous http

4
推荐指数
1
解决办法
1788
查看次数