Rumah pangkalan data tutorial mysql 由数据库的HWM想起的对ArcSDE数据库的性能优化

由数据库的HWM想起的对ArcSDE数据库的性能优化

Jun 07, 2016 pm 03:48 PM
oracle pengoptimuman prestasi pangkalan data

在Oracle数据的存储中,可以把存储空间想象为一个水库,数据想象为水库中的水。水库中的水的位置有一条线叫做水位线,在Oracle中,这条线被称为高水位线(High-warter mark, HWM)。在数据库表刚建立的时候,由于没有任何数据,所以这个时候水位线是空的,也

在Oracle数据的存储中,可以把存储空间想象为一个水库,数据想象为水库中的水。水库中的水的位置有一条线叫做水位线,在Oracle中,这条线被称为高水位线(High-warter mark, HWM)。在数据库表刚建立的时候,由于没有任何数据,所以这个时候水位线是空的,也就是说HWM为最低值。当插入了数据以后,高水位线就会上涨,但是这里也有一个特性,就是如果你采用delete语句删除数据的话,数据虽然被删除了,但是高水位线却没有降低,还是你刚才删除数据以前那么高的水位。也就是说,这条高水位线在日常的增删操作中只会上涨,不会下跌。HWM通常增长的幅度为一次5个数据块.

 

Select语句会对表中的数据进行一次扫描,但是究竟扫描多少数据存储块呢,这个并不是说数据库中有多少数据,Oracle就扫描这么大的数据块,而是Oracle会扫描高水位线以下的数据块。现在来想象一下,如果刚才是一张刚刚建立的空表,你进行了一次Select操作,那么由于高水位线HWM在最低的0位置上,所以没有数据块需要被扫描,扫描时间会极短。而如果这个时候你首先插入了一千万条数据,然后再用delete语句删除这一千万条数据。由于插入了一千万条数据,所以这个时候的高水位线就在一千万条数据这里。后来删除这一千万条数据的时候,由于delete语句不影响高水位线,所以高水位线依然在一千万条数据这里。这个时候再一次用select语句进行扫描,虽然这个时候表中没有数据,但是由于扫描是按照高水位线来的,所以需要把一千万条数据的存储空间都要扫描一次,也就是说这次扫描所需要的时间和扫描一千万条数据所需要的时间是一样多的。所以有时候有人总是经常说,怎么我的表中没有几条数据,但是还是这么慢呢,这个时候其实奥秘就是这里的高水位线了。

 

    那有没有办法让高水位线下降呢,其实有一种比较简单的方法,那就是采用TRUNCATE语句进行删除数据。采用TRUNCATE语句删除一个表的数据的时候,类似于重新建立了表,不仅把数据都删除了,还把HWM给清空恢复为0。所以如果需要把表清空,在有可能利用TRUNCATE语句来删除数据的时候就利用TRUNCATE语句来删除表,特别是那种数据量有可能很大的临时存储表。


---------------------感谢http://blog.csdn.net/tianlesoftware的相关总结

那么由数据库Oracle的高水位线来延伸到我们的ArcSDE数据库,我们在进行编辑,不管是版本编辑或者是非版本编辑,都有可能进行删除操作,更新也是删除再新增的过程,那么如果用户的编辑操作删除占的比重比较大时,就面临着上面所说的问题,更不要说有可能有用户出现将整个要素类的要素全部删除的情况,那么HWM的情况就需要我们注意了。

我们来做个实验,我在数据库中导入一个要素类,然后将要素全表删除掉,我们看看有什么情况发生。

导入之后我们查看图层记录

SQL> select count(*) from zd;

  COUNT(*)
----------
      4555
Salin selepas log masuk
我们查看一下这个图层(表)所有分配的Block
SQL> select segment_name,segment_type,blocks from user_segments where segment_name='ZD';

SEGMENT_NAME                                                                      SEGMENT_TYPE        BLOCKS
--------------------------------------------------------------------------------- ------------------ ----------
ZD                                                                                TABLE                  256
Salin selepas log masuk
然后我们进行ArcGIS的分析操作
SQL> select table_name,num_rows,blocks,empty_blocks from user_tables where table_name='ZD';

TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS
------------------------------ ---------- ---------- ------------
ZD                                   4555        244            0
Salin selepas log masuk
经过分析之后,我们可以看到图层的行数已经要素所占的Blocks,但是empty_blocks为空,我们可以使用Oracle的分析功能来实现。(注意,ArcGIS的分析功能其实是调用了 dbms_stats的存储过程,和Oracle本身分析有区别)
SQL> analyze table ZD compute statistics;

表已分析。

SQL> select table_name,num_rows,blocks,empty_blocks from user_tables where table_name='ZD';

TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS
------------------------------ ---------- ---------- ------------
ZD                                   4555        244           12
Salin selepas log masuk
然后我们将整个要素类的数据进行非版本编辑的删除
SQL> select count(*) from zd;

  COUNT(*)
----------
         0

SQL> select segment_name,segment_type,blocks from user_segments where segment_name='ZD';

SEGMENT_NAME                                                                      SEGMENT_TYPE        BLOCKS
--------------------------------------------------------------------------------- ------------------ ----------
ZD                                                                                TABLE                  256

SQL> select table_name,num_rows,blocks,empty_blocks from user_tables where table_name='ZD';

TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS
------------------------------ ---------- ---------- ------------
ZD                                   4555        244           12
Salin selepas log masuk
由上面可以看到,虽然我们的表里面的记录已经为空了,但是所占用的Blocks仍然存在,那么由上面的概念表述所说,我们在进行查询的时候不是看表里面的记录多少,而是针对某个表所占的blocks进行搜索,如果上面的情况,那么无疑我们消耗了大量的无效的系统资源。


我们可以使用Trucate表的方法来处理

SQL> truncate table zd;

表被截断。

SQL> select segment_name,segment_type,blocks from user_segments where segment_name='ZD';

SEGMENT_NAME                                                                      SEGMENT_TYPE        BLOCKS
--------------------------------------------------------------------------------- ------------------ ----------
ZD                                                                                TABLE                    8

SQL> select table_name,num_rows,blocks,empty_blocks from user_tables where table_name='ZD';

TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS
------------------------------ ---------- ---------- ------------
ZD                                   4555        244           12
Salin selepas log masuk
虽然所占用的blocks变成默认的8KB了,但是我们的统计信息没有改变,我们需要重新统计一下
SQL> exec dbms_stats.gather_table_stats('TEST','ZD');

PL/SQL 过程已成功完成。

SQL> select table_name,num_rows,blocks,empty_blocks from user_tables where table_name='ZD';

TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS
------------------------------ ---------- ---------- ------------
ZD                                      0          0           12

SQL> analyze table ZD compute statistics;

表已分析。

SQL> select table_name,num_rows,blocks,empty_blocks from user_tables where table_name='ZD';

TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS
------------------------------ ---------- ---------- ------------
ZD                                      0          0            8
Salin selepas log masuk
从上面的实验我们可以将HWM的知识体会的比较深。


但是在现实的业务中并不是将某些表全部删除,而是进行部分的删除,那么我们可以使用另外一种方法来处理。

在上面的例子的基础上,我删除了若干条记录,然后进行统计分析

SQL> select table_name,num_rows,blocks,empty_blocks from user_tables where table_name='ZD';

TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS
------------------------------ ---------- ---------- ------------
ZD                                    571        244           12
Salin selepas log masuk
我们可以看到,在没有经过任何处理情况下,只有行数变化了,所占用的blocks和emptry_blocks都是和原来一样,那么我们进行
SQL> alter table zd move;

表已更改。
Salin selepas log masuk
然后在进行重新统计
SQL> exec dbms_stats.gather_table_stats('TEST','ZD');
BEGIN dbms_stats.gather_table_stats('TEST','ZD'); END;

*
第 1 行出现错误:
ORA-20000: index "TEST"."R132_SDE_ROWID_UK"  or partition of such index is in unusable state
ORA-06512: 在 "SYS.DBMS_STATS", line 20337
ORA-06512: 在 "SYS.DBMS_STATS", line 20360
ORA-06512: 在 line 1
Salin selepas log masuk
提示ZD表中的R132_SDE_ROWID_UK索引对象有问题,需要注意一下,当我们进行了上面的move操作之后,我们必须对索引(这个索引是属性索引)进行重建
SQL> alter index R132_SDE_ROWID_UK rebuild online;

索引已更改。

SQL> exec dbms_stats.gather_table_stats('TEST','ZD');

PL/SQL 过程已成功完成。

SQL> analyze table ZD compute statistics;

表已分析。

SQL> select table_name,num_rows,blocks,empty_blocks from user_tables where table_name='ZD';

TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS
------------------------------ ---------- ---------- ------------
ZD                                    571         24            0
Salin selepas log masuk
这样的话,才能看到实际的结果。

那么如果是版本编辑,找到相关的A表、D表,操作应该是类似的。


----------------------------------------------------------

说明:针对上面实验,我们可以针对某个我们常编辑的图层,而且定位到这个图层的效率很低,我们可以看看是不是跟HWM有关系,其实上面讲的如果没有听明白,没有关系,最简单的方法,将你的效率低的图层,导出来到FGDB里面,然后数据库删除掉该图层,再导进去,其实变相的就没有这种负担了.前提你不再大量编辑了。


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara memeriksa saiz meja oracle Cara memeriksa saiz meja oracle Apr 11, 2025 pm 08:15 PM

Untuk menanyakan saiz ruang meja oracle, ikuti langkah -langkah berikut: Tentukan nama meja dengan menjalankan pertanyaan: pilih Tablespace_Name dari DBA_TableSpaces; Tanya saiz meja dengan menjalankan pertanyaan: pilih jumlah (bait) sebagai total_size, jumlah (bytes_free) sebagai tersedia_space, jumlah (bytes) - jumlah (bytes_free) sebagai digunakan_space dari dba_data_files di mana tablespace_

Cara mengimport pangkalan data oracle Cara mengimport pangkalan data oracle Apr 11, 2025 pm 08:06 PM

Kaedah Import Data: 1. Gunakan utiliti SQLLoader: Sediakan fail data, buat fail kawalan, dan jalankan SQLLoader; 2. Gunakan alat IMP/EXP: data eksport, data import. Petua: 1. Disyorkan SQL*loader untuk set data besar; 2. Jadual sasaran harus wujud dan perlawanan definisi lajur; 3. Selepas mengimport, integriti data perlu disahkan.

Cara membuat jadual di oracle Cara membuat jadual di oracle Apr 11, 2025 pm 08:00 PM

Mewujudkan Jadual Oracle melibatkan langkah -langkah berikut: Gunakan sintaks Create Table untuk menentukan nama jadual, nama lajur, jenis data, kekangan, dan nilai lalai. Nama jadual harus ringkas dan deskriptif, dan tidak boleh melebihi 30 aksara. Nama lajur hendaklah menjadi deskriptif, dan jenis data menentukan jenis data yang disimpan dalam lajur. Kekangan tidak null memastikan bahawa nilai null tidak dibenarkan dalam lajur, dan klausa lalai menentukan nilai lalai untuk lajur. Kekangan utama utama untuk mengenal pasti rekod unik jadual. Kekangan utama asing menentukan bahawa lajur dalam jadual merujuk kepada kunci utama dalam jadual lain. Lihat penciptaan pelajar jadual sampel, yang mengandungi kunci utama, kekangan unik, dan nilai lalai.

Cara menyahpasang pemasangan Oracle gagal Cara menyahpasang pemasangan Oracle gagal Apr 11, 2025 pm 08:24 PM

Nyahpasang Kaedah untuk kegagalan pemasangan Oracle: Tutup Perkhidmatan Oracle, Padam Fail Program Oracle dan Kekunci Pendaftaran, Nyahpasang pembolehubah persekitaran Oracle, dan mulakan semula komputer. Jika penyahpasang gagal, anda boleh menyahpasang secara manual menggunakan alat penyahpasang Oracle Universal.

Cara menyelesaikan kod gadbled di oracle Cara menyelesaikan kod gadbled di oracle Apr 11, 2025 pm 10:09 PM

Masalah Garbled Oracle boleh diselesaikan dengan memeriksa set aksara pangkalan data untuk memastikan ia sepadan dengan data. Tetapkan set aksara klien untuk memadankan pangkalan data. Tukar data atau ubah suai set aksara lajur untuk memadankan set aksara pangkalan data. Gunakan set aksara Unicode dan elakkan set aksara multibyte. Semak bahawa tetapan bahasa pangkalan data dan pelanggan betul.

Mengapa menggunakan mysql? Faedah dan kelebihan Mengapa menggunakan mysql? Faedah dan kelebihan Apr 12, 2025 am 12:17 AM

MySQL dipilih untuk prestasi, kebolehpercayaan, kemudahan penggunaan, dan sokongan komuniti. 1.MYSQL Menyediakan fungsi penyimpanan dan pengambilan data yang cekap, menyokong pelbagai jenis data dan operasi pertanyaan lanjutan. 2. Mengamalkan seni bina pelanggan-pelayan dan enjin penyimpanan berganda untuk menyokong urus niaga dan pengoptimuman pertanyaan. 3. Mudah digunakan, menyokong pelbagai sistem operasi dan bahasa pengaturcaraan. 4. Mempunyai sokongan komuniti yang kuat dan menyediakan sumber dan penyelesaian yang kaya.

Cara menyulitkan pandangan oracle Cara menyulitkan pandangan oracle Apr 11, 2025 pm 08:30 PM

Penyulitan Oracle View membolehkan anda menyulitkan data dalam pandangan, dengan itu meningkatkan keselamatan maklumat sensitif. Langkah -langkah termasuk: 1) mewujudkan kunci penyulitan induk (MEK); 2) mencipta pandangan yang disulitkan, menyatakan pandangan dan MEK untuk disulitkan; 3) Memberi kuasa pengguna untuk mengakses pandangan yang disulitkan. Bagaimana pandangan yang disulitkan berfungsi: Apabila permintaan pengguna untuk paparan yang disulitkan, Oracle menggunakan MEK untuk menyahsulit data, memastikan bahawa hanya pengguna yang diberi kuasa dapat mengakses data yang boleh dibaca.

Apa yang perlu dilakukan sekiranya oracle tidak dapat dibuka Apa yang perlu dilakukan sekiranya oracle tidak dapat dibuka Apr 11, 2025 pm 10:06 PM

Penyelesaian kepada Oracle tidak boleh dibuka termasuk: 1. Mulakan perkhidmatan pangkalan data; 2. Mulakan pendengar; 3. Periksa konflik pelabuhan; 4. Menetapkan pembolehubah persekitaran dengan betul; 5. Pastikan perisian firewall atau antivirus tidak menghalang sambungan; 6. Periksa sama ada pelayan ditutup; 7. Gunakan RMAN untuk memulihkan fail rasuah; 8. Periksa sama ada nama perkhidmatan TNS betul; 9. Periksa sambungan rangkaian; 10. Pasang semula perisian Oracle.

See all articles