基于12c in-memory新特性的SQL优化比拼
在本次中#2014年Orcl-Con甲骨文控活动#引入了一个利用12c in-memory特性优化查询语句的workshop ,在不考虑索引等特性的前提下,仅仅使用12c IMCC特性,崔胄同学利用inmemory和并行特性将原本需要1分钟运行的SQL,优化到1.37秒,提升数十倍,成功赢得ipad!
在本次中#2014年Orcl-Con甲骨文控活动#引入了一个利用12c in-memory特性优化查询语句的workshop ,在不考虑索引等特性的前提下,仅仅使用12c IMCC特性,崔胄同学利用inmemory和并行特性将原本需要1分钟运行的SQL,优化到1.37秒,提升数十倍,成功赢得ipad!
该次SQL优化比拼的?原帖地址http://t.cn/RzURLTJ
OKAY 我们来优化一下, 既然索引,物化视图等传统技术无法使用,我们只能使用使用一些oracle的大数据处理技术来提高性能 首先创建表 scripts 可以查看 xxxxxxxx 这里提一下, 在创建表的时候使用pctfree 0 来适当的降低了逻辑读。 创建完毕 COUNT(*)||'TIME_ROWS' 58432 time_rows 29402976 sales_rows 1776000 customers_rows 160 channles_rows 创建完后 跑了一下 no tuning 172706 consistent gets Elapsed: 00:00:22.11 oooooopss~ 22秒 看来需要优化 开始使用 in-memory 组件 来优化 SQL> select * from v$version; BANNER Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production SQL> show parameter inmemory NAME TYPE VALUE ------------------------------------ --------------------------------- ------------------------------ inmemory_clause_default string inmemory_force string DEFAULT inmemory_max_populate_servers integer 7 inmemory_query string ENABLE inmemory_size big integer 16G inmemory_trickle_repopulate_servers_ integer 1 percent optimizer_inmemory_aware boolean TRUE 如果内存有限 可以适当的只存放 需要的 列来降低使用memory alter table SHOUG.times inmemory; alter table SHOUG.sales inmemory; alter table shoug.sales no inmemory(PROD_ID,PROMO_ID,QUANTITY_SOLD); alter table shoug.customers inmemory; alter table SHOUG.channels inmemory; Statistics 41 recursive calls 17 db block gets 54 consistent gets 2 physical reads 1188 redo size 1584 bytes sent via SQLNet to client 562 bytes received via SQLNet from client 3 SQL*Net roundtrips to/from client 5 sorts (memory) 0 sorts (disk) 24 rows processed Elapsed: 00:00:19.70 可以看到 物理读几乎已经很弱了, 但是速度还是不快 优化CPU使用, 可以看到 inmemory 使用后 cpu 使用率达到了100% 但是, 可以看到等待全落在了 单颗 cpu上 所以根据数据量的大小, 来设置并行度 conn shoug/oracle alter table shoug.sales parallel 8; alter table shoug.times parallel 1; alter table shoug.customers parallel 8; alter table shoug.channel parallel 4; select table_name,degree from user_tables; set timing on SELECT /* use inmemory / /+parallel (shoug.customers 8)*/ c.cust_city, t.calendar_quarter_desc, SUM(s.amount_sold) sales_amount FROM SHOUG.sales s, SHOUG.times t, SHOUG.customers c WHERE s.time_id = t.time_id AND s.cust_id = c.cust_id AND c.cust_state_province = 'FL' AND t.calendar_quarter_desc IN ('2000-01', '2000-02', '1999-12') AND s.time_id IN (SELECT time_id FROM SHOUG.times WHERE calendar_quarter_desc IN ('2000-01', '2000-02', '1999-12')) AND s.cust_id IN (SELECT cust_id FROM SHOUG.customers WHERE cust_state_province = 'FL') AND s.channel_id IN (SELECT channel_id FROM SHOUG.channels WHERE channel_desc = 'Direct Sales') GROUP BY c.cust_city, t.calendar_quarter_desc; 24 rows selected. Elapsed: 00:00:01.37 Statistics 203 recursive calls 0 db block gets 254 consistent gets 0 physical reads 0 redo size 1574 bytes sent via SQLNet to client 562 bytes received via SQLNet from client 3 SQL*Net roundtrips to/from client 0 sorts (memory) [root@db ~]# top top - 23:51:34 up 6 days, 18:18, 6 users, load average: 0.65, 0.17, 0.15 Tasks: 391 total, 3 running, 387 sleeping, 0 stopped, 1 zombie Cpu0 : 23.3%us, 0.0%sy, 0.0%ni, 76.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 22.6%us, 0.3%sy, 0.0%ni, 77.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 23.7%us, 0.3%sy, 0.0%ni, 76.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 22.3%us, 0.0%sy, 0.0%ni, 77.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu4 : 54.8%us, 0.7%sy, 0.0%ni, 44.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu5 : 22.1%us, 0.0%sy, 0.0%ni, 77.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu6 : 24.3%us, 0.0%sy, 0.0%ni, 75.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu7 : 22.6%us, 0.3%sy, 0.0%ni, 77.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 32882416k total, 32061328k used, 821088k free, 13416k buffers Swap: 8388600k total, 52k used, 8388548k free, 30221056k cached 可以看到cpu使用率达到了30% 以上, 并且, 已经没有内存排序 PS: 恭喜 oracle 在12.1.0.2 版本内 以inmemory 列存储的方式 推出了 vector计算方式, 打破了actian vector db 在大数据市场独领风骚的格局。
Related posts:
- COLLABORATE 14 – SHOUG FORUM 上海ORACLE用户组2014年高峰论坛报名
- Oracle OLTP表压缩技术
- 2014年3月21日晚SHOUG上海ORACLE用户组首次线下活动
- SHOUG User Group Young Expert Program
原文地址:基于12c in-memory新特性的SQL优化比拼, 感谢原作者分享。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

HQL et SQL sont comparés dans le framework Hibernate : HQL (1. Syntaxe orientée objet, 2. Requêtes indépendantes de la base de données, 3. Sécurité des types), tandis que SQL exploite directement la base de données (1. Normes indépendantes de la base de données, 2. Exécutable complexe requêtes et manipulation de données).

"Utilisation de l'opération de division dans OracleSQL" Dans OracleSQL, l'opération de division est l'une des opérations mathématiques courantes. Lors de l'interrogation et du traitement des données, les opérations de division peuvent nous aider à calculer le rapport entre les champs ou à dériver la relation logique entre des valeurs spécifiques. Cet article présentera l'utilisation de l'opération de division dans OracleSQL et fournira des exemples de code spécifiques. 1. Deux méthodes d'opérations de division dans OracleSQL Dans OracleSQL, les opérations de division peuvent être effectuées de deux manières différentes.

Oracle et DB2 sont deux systèmes de gestion de bases de données relationnelles couramment utilisés, chacun possédant sa propre syntaxe et ses propres caractéristiques SQL. Cet article comparera et différera la syntaxe SQL d'Oracle et de DB2, et fournira des exemples de code spécifiques. Connexion à la base de données Dans Oracle, utilisez l'instruction suivante pour vous connecter à la base de données : CONNECTusername/password@database Dans DB2, l'instruction pour vous connecter à la base de données est la suivante : CONNECTTOdataba.

Concurrence en technologie de base de données : quelles sont les différences entre Oracle et SQL ? Dans le domaine des bases de données, Oracle et SQL Server sont deux systèmes de gestion de bases de données relationnelles très respectés. Bien qu’elles appartiennent toutes deux à la catégorie des bases de données relationnelles, il existe de nombreuses différences entre elles. Dans cet article, nous examinerons les différences entre Oracle et SQL Server, ainsi que leurs fonctionnalités et avantages dans les applications pratiques. Tout d'abord, il existe des différences de syntaxe entre Oracle et SQL Server.

La complexité temporelle mesure le temps d'exécution d'un algorithme par rapport à la taille de l'entrée. Les conseils pour réduire la complexité temporelle des programmes C++ incluent : le choix des conteneurs appropriés (tels que vecteur, liste) pour optimiser le stockage et la gestion des données. Utilisez des algorithmes efficaces tels que le tri rapide pour réduire le temps de calcul. Éliminez les opérations multiples pour réduire le double comptage. Utilisez des branches conditionnelles pour éviter les calculs inutiles. Optimisez la recherche linéaire en utilisant des algorithmes plus rapides tels que la recherche binaire.

Analyse de l'impact du numéro de connexion MySQL sur les performances des bases de données Avec le développement continu des applications Internet, les bases de données sont devenues un outil important de stockage et de gestion des données pour prendre en charge les systèmes d'application. Dans le système de base de données, le nombre de connexions est un concept important, directement lié aux performances et à la stabilité du système de base de données. Cet article partira du point de vue de la base de données MySQL, explorera l'impact du nombre de connexions sur les performances de la base de données et l'analysera à travers des exemples de code spécifiques. 1. Quel est le nombre de connexions ? Le nombre de connexions fait référence au nombre de connexions client prises en charge par le système de base de données en même temps. Il peut également être géré.

1. Appuyez sur la combinaison de touches (touche Win + R) sur le bureau pour ouvrir la fenêtre d'exécution, puis entrez [regedit] et appuyez sur Entrée pour confirmer. 2. Après avoir ouvert l'éditeur de registre, nous cliquons pour développer [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer], puis voyons s'il y a un élément Sérialiser dans le répertoire. Sinon, nous pouvons cliquer avec le bouton droit sur Explorateur, créer un nouvel élément et le nommer Sérialiser. 3. Cliquez ensuite sur Sérialiser, puis cliquez avec le bouton droit sur l'espace vide dans le volet de droite, créez une nouvelle valeur de bit DWORD (32) et nommez-la Étoile.

La configuration des paramètres du Vivox100 révélée : Comment optimiser les performances du processeur ? À l’ère actuelle de développement technologique rapide, les smartphones sont devenus un élément indispensable de notre vie quotidienne. En tant qu'élément important d'un smartphone, l'optimisation des performances du processeur est directement liée à l'expérience utilisateur du téléphone mobile. En tant que smartphone haut de gamme, la configuration des paramètres du Vivox100 a attiré beaucoup d'attention, en particulier l'optimisation des performances du processeur a attiré beaucoup d'attention de la part des utilisateurs. En tant que « cerveau » du téléphone mobile, le processeur affecte directement la vitesse de fonctionnement du téléphone mobile.
