田辺  亮介

田辺 亮介

1657868460

ALTER TABLE 的黑暗面:指南

在本博客中,我們將討論開發人員和 DBA 應如何以適當的方式使用 ALTER TABLE 以避免此查詢可能產生的問題。

如果您經常發現自己沉浸在 MySQL 世界中,那麼可能無需向您解釋什麼是 SQL 查詢以及它們的作用。很有可能,你知道它們就像你的五個手指一樣。SELECT查詢允許我們讀取數據,INSERT查詢允許我們將數據插入給定的數據庫,UPDATE查詢允許我們更新某些行或整個表的數據,如果我們願意,DELETE查詢允許我們從表中刪除記錄,等等。如果你'雖然曾經深入研究過 MySQL 的世界,但您必須知道還有一個查詢對數據庫管理員和開發人員都非常重要——該查詢是ALTER TABLE.

什麼是 ALTER TABLE?

簡單地說,ALTER TABLE是 MySQL 中的一個查詢,它允許我們修改(或ALTER)表的結構。可以做的事情ALTER TABLE很多——ALTER TABLE可以用來更改表或列的名稱,或者添加或修改列。但最終,ALTER TABLE它主要在涉及索引時使用——當開發人員需要添加索引時,他們會更改表的結構,這就是ALTER TABLE再次發揮作用的地方。

ALTER TABLE 的速度

顯然,語句的速度ALTER TABLE直接取決於我們要修改的表或列的大小——但是,有一個警告。ALTER TABLE對錶的副本執行所有操作,而不是對錶本身。換句話說,當命令 MySQL 修改表並ALTER TABLE運行語句時,MySQL 會復制正在修改的表,將我們當前在表中的數據插入其中,執行所有必需的操作在那裡,並將數據複製回我們的表中 - 只有這樣我們才能看到結果。

ALTER TABLE如果我們不使用 InnoDB 作為我們選擇的主要存儲引擎,工作方式可能會有所不同——在所有操作完成之前,MyISAM 不會顯示插入到表中的行,但儘管如此,核心前提保持不變。這種聲明的速度直接取決於下面列出的因素。

  1. 我們的數據庫表的結構。
  2. 我們桌子的大小。
  3. 我們的網絡和數據庫服務器。
  4. 我們的 MySQL 配置。
  5. 我們運行查詢的方式。

首先,我們表的結構很重要,因為涉及未正確“關心”(索引等)的列的查詢將比它們應該的要慢。另外,請記住,如果我們的表沒有使用規範化,我們的查詢將比應有的速度慢,尤其是在我們的表很大的情況下。想像一下將數百萬不必要的行複製到另一個表中……:聽起來很慢,不是嗎?

其次,我們的表的大小確實很重要,因為我們的表越大,它們複製的時間就越長。第二點也與所有其他點密切相關,因為我們還必須考慮我們的 Web 服務器是如何配置的,以及我們運行查詢的方式,以便它們在沒有問題的情況下盡快完成:例如,如果我們的數據庫服務器配置為使用 80% 的可用操作內存,那麼我們的查詢可能會比使用默認配置更快地完成。此外,如果我們ALTER TABLE一個接一個地運行多個查詢並且磁盤空間不足,我們將面臨完全耗盡它的風險。請允許我們舉例說明。

ALTER TABLE 的陰暗面

假設我們有一個具有 16GB RAM 和 100GB 硬盤空間的專用服務器。一個好的 DBA 可能會將其配置為佔用 8GB 或更多的操作內存,並假設我們要對其運行ALTER TABLE查詢的表包含 1 億條記錄並且未進行規範化。總而言之,這張表所包含的所有內容都佔用了 20GB 的磁盤空間。

在這一點上,我們可能還需要使用其他幾個表——比如說,它們佔用了另外 50GB 的硬盤空間,但你明白了。這是我們運行的查詢:隨意調整,然後將其複制並粘貼到您的Arctype 客戶端中。

ALTER TABLE demo_table MODIFY demo_column VARCHAR(150) NOT NULL AFTER another_column;

首先,MySQL 會在磁盤上複製表,然後將當前數據插入其中,執行所有必要的操作,然後才將新舊表交換在一起:還記得我們還有 30GB 的磁盤空間嗎?創建臨時表後,我們將剩下 10GB。到那時,我們可能會開始祈禱索引佔用的空間小於 10GB 並且我們的查詢成功完成。如果我們用完了磁盤空間,我們的查詢就會中斷。我們真的希望看到這樣的結果嗎?當然不是。

使用 ALTER TABLE 避免問題

如您所見,一旦ALTER TABLE深入參與我們的數據庫流程,我們很可能會面臨多個問題。我們如何解決它們?

一種方法是使用工具來製作表的副本並使用觸發器對其進行修改,以在準備新表時保持可訪問性:換句話說,在不鎖定表的情況下更改表的結構:獲取完整指南,到這裡來

我們可以完成此類任務的另一種方法是手動,這意味著我們也可以使用如下方法:

  1. 我們需要確保INSERT語句快速——我們創建的表不應該有任何索引,並且我們的 MySQL 實例應該正確配置。
  2. 我們需要創建一個新表。
  3. 創建表後,我們需要將舊表中的數據複製到新創建的表中,使用INSERT INTO demo2 SELECT * FROM demowheredemo2是新表和demo舊表的名稱。不過,在此之前,請確保兩個表的結構相同(請參見下圖 #5。)
  4. 我們刪除(刪除)舊表:DROP TABLE demo.
  5. 我們將新表重命名為舊表的名稱:ALTER TABLE demo2 RENAME TO demo.

Arctype 客戶端給出的錯誤

如果我們更喜歡手動完成步驟,那麼這種方法就可以了。但是,請記住,這種方法ALTER TABLE最初就是這樣做的,並且在某些極端情況下,DROP TABLE執行起來可能會變得非常慢——在這種情況下,通過使用SHOW PROCESSLIST然後KILL是特定的查詢 ID 來終止查詢。然後,執行一條TRUNCATE TABLE語句——截斷表通常比完全刪除它們要快得多。

TRUNCATE TABLE使用 Arctype 進行查詢

就是這樣——問題解決了!

您可能還注意到,我們在本博客的大部分示例中都使用了Arctype 客戶端——這並非沒有原因。Arctype 構建了一個高級 SQL 客戶端,可以幫助我們運行 SQL 查詢,自動完成部分查詢,與團隊共享查詢結果,“即時”修改我們的表結構,甚至構建自定義儀表板。能好起來嗎?它真的沒有。立即試用 Arctype 客戶端,處理您的數據,規範化您的數據庫和模式,當然,ALTER TABLE謹慎使用查詢

鏈接:https ://arctype.com/blog/mysql-alter-table-problems/

#mysql 

What is GEEK

Buddha Community

ALTER TABLE 的黑暗面:指南
Fredy  Larson

Fredy Larson

1595209620

How to alter tables in production when records are in millions

As a developer, I have experienced changes in app when it is in production and the records have grown up to millions. In this specific case if you want to alter a column using simple migrations that will not work because of the following reasons:

It is not so easy if your production servers are under heavy load and the database tables have 100 million rows. Because such a migration will run for some seconds or even minutes and the database table can be locked for this time period – a no-go on a zero-downtime environment.

In this specific case you can use MySQL’s algorithms: Online DDL operations. That’s how you can do it in Laravel.

First of all create migration. For example I want to modify a column’s name the traditional migration will be:

Schema::table('users', function (Blueprint $table) {
            $table->renameColumn('name', 'first_name');
        });

Run the following command php artisan migrate –pretend this command will not run the migration rather it will print out it’s raw sql:

ALTER TABLE users CHANGE name first_name VARCHAR(191) NOT NULL

Copy that raw sql, remove following code:

Schema::table('users', function (Blueprint $table) {
            $table->renameColumn('name', 'first_name');
        });

Replace it with following in migrations up method:

\DB::statement('ALTER TABLE users CHANGE name first_name VARCHAR(191) NOT NULL');

Add desired algorithm, in my case query will look like this:

\DB::statement('ALTER TABLE users CHANGE name first_name VARCHAR(191) NOT NULL, ALGORITHM=INPLACE, LOCK=NONE;');

#laravel #mysql #php #alter heavy tables in production laravel #alter table in production laravel #alter tables with million of records in laravel #how to alter heavy table in production laravel #how to alter table in production larave #mysql online ddl operations

Jerod  Mante

Jerod Mante

1602242460

SQL ALTER TABLE Example | How To Alter Table in SQL

SQL ALTER TABLE query is used to add, modify, or delete columns in the existing table. The ALTER TABLE query is also used to add and drop various constraints on a current table. ALTER TABLE statement in SQL is used to add, modify, or drop columns in a table. You can also use an ALTER TABLE command to add and drop various constraints on an existing table.

SQL ALTER TABLE Statement Example

SQL ALTER TABLE modifies the table definition by altering, adding, or dropping columns and constraints. ALTER TABLE also reassigns and rebuilds the partitions, or disables and enables the constraints and  triggers.

Once a table is created in the database, there are many occasions where one may wish to change the structure of the table.

#sql #sql alter table #alter table

Julie  Donnelly

Julie Donnelly

1596495120

Beginner’s Guide to Table Partitioning In PostgreSQL

Table partitioning in SQL, as the name suggests, is a process of dividing large data tables into small manageable parts, such that each part has its own name and characteristics.

Table partitioning helps in significantly improving database server performance as less number of rows have to be read, processed and returned. We can also use partitioning techniques for dividing indexes and index-organized tables.

Table partitioning can be of two types, namely, vertical partitioning or horizontal partitioning. In vertical partitioning, we divide the table column wise. While in horizontal partitioning, we divide the table row wise on the basis of range of values in a certain column.

Syntax and parameters

The basic syntax for partitioning a table using range is as follows :

Main table creation :

CREATE TABLE main_table_name (

column_1 data type,

column_2 data type,

.

.

. ) PARTITION BY RANGE (column_2);

Partition table creation :

CREATE TABLE partition_name

PARTITION OF main_table_name FOR VALUES FROM (start_value) TO (end_value);

The parameters used in the above mentioned syntax are similar to CREATE TABLE statement, except these :

PARTITION BY RANGE (column_2) : column_2 is the field on the basis of which partitions will be created.

partition_name : name of the partition table

FROM (start_value) TO (end_value) : The range of values in column_2, which forms the part of this partition. Note that start_value is inclusive, while end_value is exclusive.

Here is an example to illustrate it further.

Example

Imagine that you are working as a data engineer for an e-com firm that gets a huge number of orders on a daily basis. You usually store data such as order_id, order_at, customer_id etc. in a SQL table called “e-transactions’’. Since, the table has a humongous amount of data in it, the low load speed and high return time etc. have become a problem for data analysts, who use this table for preparing KPIs on a daily basis.

What will you do to improvise this table, so that data analysts can run queries quickly?

A logical step would be partitioning the table into smaller parts. Let’s say we create partitions such that the partition stores data pertaining to specified order dates only. This way, we will have less data in each partition and working on it will be more fun.

We can partition the table using declarative partitioning i.e. by using a PARTITION BY RANGE (column_name) function as shown below.

#postgresql #drop-table #sql #alter-table #table-partitioning

田辺  亮介

田辺 亮介

1657868460

ALTER TABLE 的黑暗面:指南

在本博客中,我們將討論開發人員和 DBA 應如何以適當的方式使用 ALTER TABLE 以避免此查詢可能產生的問題。

如果您經常發現自己沉浸在 MySQL 世界中,那麼可能無需向您解釋什麼是 SQL 查詢以及它們的作用。很有可能,你知道它們就像你的五個手指一樣。SELECT查詢允許我們讀取數據,INSERT查詢允許我們將數據插入給定的數據庫,UPDATE查詢允許我們更新某些行或整個表的數據,如果我們願意,DELETE查詢允許我們從表中刪除記錄,等等。如果你'雖然曾經深入研究過 MySQL 的世界,但您必須知道還有一個查詢對數據庫管理員和開發人員都非常重要——該查詢是ALTER TABLE.

什麼是 ALTER TABLE?

簡單地說,ALTER TABLE是 MySQL 中的一個查詢,它允許我們修改(或ALTER)表的結構。可以做的事情ALTER TABLE很多——ALTER TABLE可以用來更改表或列的名稱,或者添加或修改列。但最終,ALTER TABLE它主要在涉及索引時使用——當開發人員需要添加索引時,他們會更改表的結構,這就是ALTER TABLE再次發揮作用的地方。

ALTER TABLE 的速度

顯然,語句的速度ALTER TABLE直接取決於我們要修改的表或列的大小——但是,有一個警告。ALTER TABLE對錶的副本執行所有操作,而不是對錶本身。換句話說,當命令 MySQL 修改表並ALTER TABLE運行語句時,MySQL 會復制正在修改的表,將我們當前在表中的數據插入其中,執行所有必需的操作在那裡,並將數據複製回我們的表中 - 只有這樣我們才能看到結果。

ALTER TABLE如果我們不使用 InnoDB 作為我們選擇的主要存儲引擎,工作方式可能會有所不同——在所有操作完成之前,MyISAM 不會顯示插入到表中的行,但儘管如此,核心前提保持不變。這種聲明的速度直接取決於下面列出的因素。

  1. 我們的數據庫表的結構。
  2. 我們桌子的大小。
  3. 我們的網絡和數據庫服務器。
  4. 我們的 MySQL 配置。
  5. 我們運行查詢的方式。

首先,我們表的結構很重要,因為涉及未正確“關心”(索引等)的列的查詢將比它們應該的要慢。另外,請記住,如果我們的表沒有使用規範化,我們的查詢將比應有的速度慢,尤其是在我們的表很大的情況下。想像一下將數百萬不必要的行複製到另一個表中……:聽起來很慢,不是嗎?

其次,我們的表的大小確實很重要,因為我們的表越大,它們複製的時間就越長。第二點也與所有其他點密切相關,因為我們還必須考慮我們的 Web 服務器是如何配置的,以及我們運行查詢的方式,以便它們在沒有問題的情況下盡快完成:例如,如果我們的數據庫服務器配置為使用 80% 的可用操作內存,那麼我們的查詢可能會比使用默認配置更快地完成。此外,如果我們ALTER TABLE一個接一個地運行多個查詢並且磁盤空間不足,我們將面臨完全耗盡它的風險。請允許我們舉例說明。

ALTER TABLE 的陰暗面

假設我們有一個具有 16GB RAM 和 100GB 硬盤空間的專用服務器。一個好的 DBA 可能會將其配置為佔用 8GB 或更多的操作內存,並假設我們要對其運行ALTER TABLE查詢的表包含 1 億條記錄並且未進行規範化。總而言之,這張表所包含的所有內容都佔用了 20GB 的磁盤空間。

在這一點上,我們可能還需要使用其他幾個表——比如說,它們佔用了另外 50GB 的硬盤空間,但你明白了。這是我們運行的查詢:隨意調整,然後將其複制並粘貼到您的Arctype 客戶端中。

ALTER TABLE demo_table MODIFY demo_column VARCHAR(150) NOT NULL AFTER another_column;

首先,MySQL 會在磁盤上複製表,然後將當前數據插入其中,執行所有必要的操作,然後才將新舊表交換在一起:還記得我們還有 30GB 的磁盤空間嗎?創建臨時表後,我們將剩下 10GB。到那時,我們可能會開始祈禱索引佔用的空間小於 10GB 並且我們的查詢成功完成。如果我們用完了磁盤空間,我們的查詢就會中斷。我們真的希望看到這樣的結果嗎?當然不是。

使用 ALTER TABLE 避免問題

如您所見,一旦ALTER TABLE深入參與我們的數據庫流程,我們很可能會面臨多個問題。我們如何解決它們?

一種方法是使用工具來製作表的副本並使用觸發器對其進行修改,以在準備新表時保持可訪問性:換句話說,在不鎖定表的情況下更改表的結構:獲取完整指南,到這裡來

我們可以完成此類任務的另一種方法是手動,這意味著我們也可以使用如下方法:

  1. 我們需要確保INSERT語句快速——我們創建的表不應該有任何索引,並且我們的 MySQL 實例應該正確配置。
  2. 我們需要創建一個新表。
  3. 創建表後,我們需要將舊表中的數據複製到新創建的表中,使用INSERT INTO demo2 SELECT * FROM demowheredemo2是新表和demo舊表的名稱。不過,在此之前,請確保兩個表的結構相同(請參見下圖 #5。)
  4. 我們刪除(刪除)舊表:DROP TABLE demo.
  5. 我們將新表重命名為舊表的名稱:ALTER TABLE demo2 RENAME TO demo.

Arctype 客戶端給出的錯誤

如果我們更喜歡手動完成步驟,那麼這種方法就可以了。但是,請記住,這種方法ALTER TABLE最初就是這樣做的,並且在某些極端情況下,DROP TABLE執行起來可能會變得非常慢——在這種情況下,通過使用SHOW PROCESSLIST然後KILL是特定的查詢 ID 來終止查詢。然後,執行一條TRUNCATE TABLE語句——截斷表通常比完全刪除它們要快得多。

TRUNCATE TABLE使用 Arctype 進行查詢

就是這樣——問題解決了!

您可能還注意到,我們在本博客的大部分示例中都使用了Arctype 客戶端——這並非沒有原因。Arctype 構建了一個高級 SQL 客戶端,可以幫助我們運行 SQL 查詢,自動完成部分查詢,與團隊共享查詢結果,“即時”修改我們的表結構,甚至構建自定義儀表板。能好起來嗎?它真的沒有。立即試用 Arctype 客戶端,處理您的數據,規範化您的數據庫和模式,當然,ALTER TABLE謹慎使用查詢

鏈接:https ://arctype.com/blog/mysql-alter-table-problems/

#mysql 

Devops Periodic Table: The Table of DevOps Tools [2021]

DevOps is a widely heard term in today’s market as the majority of the enterprises have opted to use the DevOps tools. Still many enterprises require a presentation for understanding the developments involved with using the DevOps tools. DevOps include social advancement which is a breakdown of the dividers and the storehouses between programming and activities with the tools and new techniques that empower these changes.

DevOps tools have speeded up the change in programming makers put up their applications and advance the applications for further sale to the public. The primary motivation for using DevOps tools as said by the majority of users is its quick development.

The Periodic Table of DevOps Tools is considered to be a dynamic, implant capable, and tastefully satisfying gadget that enables the clients to picture the most mainstream DevOps tools, characterize them, and sort each of those tools by usefulness and their pricing model. No matter what sort of tool you are looking for, it is just a one-stop look for the majority of the major DevOps tools branding whether it be an Open Source CI device or an Enterprise Testing tool.

#devops #devops periodic table #periodic table #devops tools